Kali Linux VM中的C分段错误

时间:2016-11-09 19:42:47

标签: c segmentation-fault

我正在尝试在使用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可能是问题?

1 个答案:

答案 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]

这两个陈述。提高编译器警告级别(如果你没有准备好它们)。