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