提问者:小点点

我不知道为什么这些代码会让核心倾倒?


我想做的代码是扫描文字和打印它与使用指针,所以我做了这个代码,但当我实现它时,它使核心转储,为什么这些代码使核心转储,如何修复它,我做的代码是错误的吗? 那么请解释给我听谢谢阅读我的问题

#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;
}

共3个答案

匿名用户

不能只分配指针:

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