使用字符串数组扫描和打印字符串

问题描述 投票:0回答:1

我创建了一个指针数组,每个指针都指向一个字符串,如下所示。

#include <stdio.h>

int main() {
    char *str[4];
    for(int i = 0; i<4; i++)
    {
        scanf("%10s", str[i]);
    }
    puts(""); // not really required
    for(int i = 0; i<4; i++)
    {
        printf("%s\t", str[i]);
    }

    return 0;
}

当我运行它时,它编译成功了。然而,当我输入一个字符串时,它给出了分段错误。有人可以帮忙吗?

这是我运行代码时得到的结果:

你好(我输入的内容) 分段错误(我按回车后立即得到这个)

arrays c pointers c-strings
1个回答
0
投票
char *str[4];

这声明了一个指向

char
的指针数组[4],其内容是不确定的,即它们不指向任何有意义的东西,并且取消引用它们将调用未定义的行为。

你必须像这样为指针分配内存:

for (size_t i = 0; i < sizeof str / sizeof *str; ++i) {
    str[i] = malloc(MAX_STR_SIZE);
}

注意,

malloc()
返回一个空指针来指示失败,并且当不再需要内存时,返回的指针必须稍后传递给
free()

© www.soinside.com 2019 - 2024. All rights reserved.