我可以使用 fgets 来接受字符指针数组中的字符串而不是 scanf

标签 c arrays string pointers fgets

虽然下面的代码工作正常。但是当我尝试使用 fgets 接受字符串时,它显示“段错误”,因为我想存储可能包含空格的字符串。如何接受字符串(可能包含空格) 在字符指针数组中

int main(){
    char* nm[5];
    char* st;
    for(int i=0;i<5;i++)
        //fgets(nm[i],30,stdin);
        scanf("%ms",&nm[i]);
    for(int i=0;i<5;i++)
        printf("%s\n",nm[i]);
return 0;
}

最佳答案

nm 是指向 5 个字符的指针,而不是指向 5 个字符串的指针,因此 &nm[2] 是 nm 中第 3 个字符的地址。如果将 nm 更改为

char* nm[5][50];

您将拥有一个 5 x 50 个字符的数组。这应该会阻止段错误。

关于我可以使用 fgets 来接受字符指针数组中的字符串而不是 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51806553/

相关文章:

c - 如何通过子进程之间的共享内存共享信号量?

c - 是否应该依赖间接 header 包含?

c - qsort 比较 : why const void *?

C结构体成员是字符串,如何直接给字节赋值

c - 如何计算数字序列中的谷数?

指针和多维数组的 C++ 双重间接寻址

c++ - 使用重载构造函数赋值

javascript - 如何按字母顺序对嵌套数组进行排序而不影响外部对象数组的顺序?

Python 字符串字节到字节

java - java中如何替换特殊字符