我写了以下代码。
int main(){
char arrays[12];
char *pointers;
scanf("%s",arrays);
scanf("%s",pointers);
printf("%s",arrays);
printf("%s",pointers);
return 0;
}
为什么在我写scanf("%s",pointers);
答案 0 :(得分:12)
char *pointers;
必须初始化。在将字符串指向某个地址之前,您无法将字符串扫描到pointers
。计算机需要知道从键盘读取的值的存储位置。
int main(){
char arrays[12];
char *pointers= arrays;
scanf("%s",pointers);
printf("%s",pointers);
return 0;
}
答案 1 :(得分:7)
因为您正在写入尚未初始化的内存中的地址。通过未初始化的指针写入内存指针会调用未定义的行为。分配足够的内存:
pointers = malloc(256);
if(!pointers)
perror("malloc");
else
scanf("%255s", pointers);
或者将其声明为静态数组:
char pointers[256];
您还应该考虑使用fgets()而不是scanf()。
您可能想要阅读i您对fgets()感兴趣:
答案 2 :(得分:4)
char *pointers;
创建一个指针变量。pointers
是address
指向的pointers
,不确定者是
默认值。*pointers
是pointers
指向的地址中的数据,在分配地址之前,您无法执行此操作。就这样做。
char arrays[12];
char *pointers;
pointers = arrays;
scanf("%s",pointers);
答案 3 :(得分:2)
pointers
而未初始化,例如int x; printf("%d\n", x);
。在使用之前,您需要使指针指向某个东西。你正在读哪本书?
答案 4 :(得分:2)
你能否详细说明错误,我现在不在编译器周围。
但是要使scanf和printf工作,你必须将它放在程序的顶部:
#include <stdio.h>
#include <stdlib.h>
两者都是C的标准库.IO包含scanf,我相当确定printf是相同的。但是,除非您知道哪些库需要哪些函数,否则每个程序都包含两个标准库。尝试使用自定义头文件,因此您不需要为每个文件提供大量#includes。
不要忘记内存分配的malloc
语句。
但是我不确定你尝试用你的代码做什么,请详细说明一下?
答案 5 :(得分:1)
pointers
是一个单位指针。你无法写入它。您将分配足够的内存来存储字符串,就像使用arrays
一样。使用指针,可以使用动态分配(参见malloc
)。