我已经编写了以下代码:
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;
必须初始化。在将其指向某个地址之前,您不能将字符串扫描到指针
中。计算机需要知道从键盘读取的值存储在哪里。
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
是由 pointers
指向的地址
,默认情况下是不确定的。*pointers
是由 pointers
指向的地址中的数据,直到分配地址后才能进行操作。就是这样。
char arrays[12];
char *pointers;
pointers = arrays;
scanf("%s",pointers);
pointers
被未初始化使用,就像 int x; printf("%d\n",x);
。在使用前需要指向某个东西。你正在读哪本书?
pointers
是一个未初始化的指针。您无法将数据写入其中。您需要分配足够的内存来存储字符串,就像使用 arrays
一样。使用指针时,可以使用动态分配(参见 malloc
)。
你能详细说明一下错误吗?我现在身边没有编译器。
但是为了让scanf和printf正常工作,你必须在程序的开头加上这个:
#include <stdio.h>
#include <stdlib.h>
这两个都是C语言的标准库。IO包含scanf,我相信printf也在同一个库中。但是在你知道哪些函数需要哪些库之前,为每个程序包含两个标准库不会有害。尽量使用自定义头文件,这样您就不需要为每个文件进行大量的#include。
不要忘记使用malloc
语句进行内存分配。
但我不确定您的代码意图是什么,请详细说明?
malloc
的替代方案。 - autistic