我想做的代码是扫描文字和打印它与使用指针,所以我做了这个代码,但当我实现它时,它使核心转储,为什么这些代码使核心转储,如何修复它,我做的代码是错误的吗? 那么请解释给我听谢谢阅读我的问题
#include <stdio.h>
#include <string.h>
int main(void)
{
char*pch[5];
int i;
for(i=0; i<5; i++)
{
printf("enter word: ");
scanf("%s", pch[i]);
}
for(i=0; i<5; i++)
{
printf("%s\n", pch[i]);
}
return 0;
}
不能只分配指针:
char*pch[5];
您需要为字符串分配内存:
char pch[5][100];
请参阅我在代码中每一节后面的注释。
char*pch[5];
PCH
是由5个字符指针组成的数组。 pch中的每个指针都指向某个垃圾值
。
for(i=0; i<5; i++)
{
printf("enter word: ");
scanf("%s", pch[i]);
}
在这里,您试图将输入字符串保存到无效地址(垃圾地址
)。 这个地址不是你的。 如果您想保存输入字符串,请为其腾出空间。 怎么做? 使用堆或堆栈上的malloc
。 我们如何在堆栈上进行分配? 见下文:
假设字符串最多有9个字符,其中一个字符代表“0”,则:
char*pch[5];
char str_0[10];
char str_1[10];
char str_2[10];
char str_3[10];
char str_4[10];
pch[0]=str_0;
pch[1]=str_1;
...... and so on ...
您可以在堆上分配整个字符串数组:
pch[0] = (char*)malloc(sizeof(char) * 10);
... and so on...
在malloc情况下,您需要释放所有缓冲区(通过在末尾调用free()
)
因为您没有为上面定义的pch指针数组分配空间。 关于Strdup