当我尝试在char指针数组中输入字符串时,为什么scanf不工作?

时间:2018-02-12 16:22:32

标签: c pointers

#include<stdio.h>
int main(){
    char *msg[10];

    scanf("%s", msg[0]);        
    scanf("%s", msg[1]);       
    scanf("%s", msg[2]);      
    scanf("%s", msg[3]);    
}

当我尝试运行此代码时,它会出错。难道我做错了什么?我还是C语言的初学者。

2 个答案:

答案 0 :(得分:1)

麻烦的是char *msg[10]是一个包含10个char指针的数组,你需要显式分配内存或使用静态数组。

方法-1:

for (i=0; i<10; i++) 
{
  msg[i] = malloc(sizeof(char) * 100)
}

选项-2

char msg[10][100]

答案 1 :(得分:1)

char *msg[10]; 

此处msg 10个字符指针的数组,并且它们未初始化。如果要在其中存储内容,请先动态分配内存。

for(int i = 0; i < 10; i++) {
  msg[i] = malloc(MAX_NO_OF_BYTES); /* MAX_NO_OF_BYTES is the no of bytes you want to allocate */
  scanf("%s",msg[i]); /* store the data into dynamically allocated memory */
}

打印它&amp;按你的意愿进行操作

for(int i = 0; i < 10; i++) {
         printf("%s\n",msg[i]);
          /** operation with array of char pointer **/
 }

完成工作后,使用free()为每个字符指针释放动态分配的内存为

for(int i = 0; i < 10; i++) {
      free(msg[i]);
 }

我希望它有所帮助。