可能重复:
使用scanf进行分段错误
我写了以下代码.
int main(){
char arrays[12];
char *pointers;
scanf("%s",arrays);
scanf("%s",pointers);
printf("%s",arrays);
printf("%s",pointers);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么写作时会出错 scanf("%s",pointers);
Jun*_*sco 13
char *pointers;
Run Code Online (Sandbox Code Playgroud)
必须初始化pointers.在将其指向某个地址之前,您无法扫描字符串.计算机需要知道从键盘读取的值的存储位置.
int main(){
char arrays[12];
char *pointers= arrays;
scanf("%s",pointers);
printf("%s",pointers);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
因为您正在写入尚未初始化的内存中的地址.通过未初始化的指针写入内存指针会调用未定义的行为.分配足够的内存:
pointers = malloc(256);
if(!pointers)
perror("malloc");
else
scanf("%255s", pointers);
Run Code Online (Sandbox Code Playgroud)
或者将其声明为静态数组:
char pointers[256];
Run Code Online (Sandbox Code Playgroud)
您还应该考虑使用fgets()而不是scanf().
您可能想要阅读i您对fgets()感兴趣:
char *pointers; 创建一个指针变量。pointers是address指向的pointers,默认情况下是不确定的。*pointers是指向的地址中的数据,在pointers分配地址之前您无法执行此操作。就这样做。
char arrays[12];
char *pointers;
pointers = arrays;
scanf("%s",pointers);
Run Code Online (Sandbox Code Playgroud)