我有以下代码:
void main(int argc, char *argv[]){
for (int i=1; i<argc; i++){
printf("%s-%lu\t", argv[i], sizeof(argv[i]));
}
}我希望$./a.out int long能给我
short-2 int-4 long-8 但我却得到了
short-8 int-8 long-8谁能告诉我原因吗?
发布于 2022-08-11 13:35:48
sizeof不是一个函数;它是一个运算符。
它给出对象、类型或常量表达式的大小。如果将类型作为字符串传递,它将不会给出类型的大小。
sizeof("long")将给出字符串文本"long"的大小(即5),而不是long类型的大小(例如8)。
由于argv是指向char的指针数组,sizeof(argv[j])将给出pointer to char的大小。
发布于 2022-08-11 14:17:58
大小接受什么类型的参数?
sizeof的操作数可以是表达式(特别是形式语法中的一元表达式),也可以是括号中的类型名称(按照C 2018 6.5.3 1 )。根据6.5.3.4 1,它不适用于:
sin),extern struct foo x;后的x,其中还没有定义struct foo )、H 112不完全类型(例如:int []),或H 214H 115位字段成员。H 216f 217
对于sizeof(argv[i]),sizeof生成argv[i]的大小,它是指向char的指针。将sizeof应用于字符串不会产生字符串中命名的类型的大小(偶然情况除外);它根据表达式本身的类型产生其结果,而不是基于表达式的值或它指向或包含的任何内容。
发布于 2022-08-11 13:39:23
如果要将用户输入与"int"、"long"等进行比较,则需要手动进行。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
if (argc < 2) exit(EXIT_FAILURE);
if (strcmp(argv[1], "int") == 0) {
int dummy = 42;
printf("size of int is %zu\n", sizeof dummy);
}
if (strcmp(argv[1], "double") == 0) {
printf("size of double is %zu\n", sizeof (double));
}
if (strcmp(argv[1], "long") == 0) {
long int dummy = 42;
printf("size of long is %zu\n", sizeof dummy);
}
return 0;
}https://stackoverflow.com/questions/73321552
复制相似问题