什么是内存区段错误(堆芯倾倒) ?

我尝试在 linux 中编写一个 C 程序,它有 sqrt 参数,下面是代码:

#include<stdlib.h>
#include<stdio.h>
#include<math.h>


int main(char *argv[]){
float k;
printf("this is consumer\n");
k=(float)sqrt(atoi(argv[1]));
printf("%s\n",k);
return 0;
}

在“ shell >”提示符下输入输入后,gcc 会显示以下错误:

Segmentation fault (core dumped)
911275 次浏览

“内存区段错误”意味着您试图访问您无法访问的内存。

第一个问题是 main的参数。main函数应该是 int main(int argc, char *argv[]),在访问 argv[1]之前应该检查 argc至少是2。

另外,由于要将 float传递给 printf(顺便说一句,当传递给 printf时,printf会被转换为 double) ,因此应该使用 %f格式说明符。%s格式说明符用于字符串(以 '\0'结尾的字符数组)。