我正在尝试在使用char数组的Linux VM中创建一个C程序。我发现每次我尝试对数组做任何事情,例如sizeof()
,我遇到了分段错误。我编写了一个测试程序,它只是制作了一个数组并得到了sizeof()
作为测试,果然我得到了同样的错误。
我认为这与在VM中运行的程序有关。这是代码:
#include <stdio.h>
#include <stdlib.h>
#define ARR_LENGTH(x) sizeof(x) / sizeof(x[0])
int main()
{
printf("Hllo world!\n");
int sent = 10;
char hello[] = {'a','b','c','d','e','f','g','h'};
printf(sizeof(hello));
printf(ARR_LENGTH(hello));
return 0;
}
我错过了什么,或者VM可能是问题?
答案 0 :(得分:3)
您只需仔细阅读printf()
文档即可。它不会将整数作为第一个参数。
有问题的行是:
printf(sizeof(hello));
printf(ARR_LENGTH(hello));
应该是:
printf("%zu\n", sizeof(hello));
printf("%zu\n", ARR_LENGTH(hello));
(%zu
是打印size_t
值的格式说明符。)
我的gcc编译器产生警告:
警告:传递'printf'的参数1使得指针来自整数 没有演员[-Wint-conversion]
这两个陈述。提高编译器警告级别(如果你没有准备好它们)。