初始化指向字符串数组的指针

时间:2014-10-21 04:03:17

标签: c arrays pointers

char *arr[100];

如何正确初始化?这条线还有其他问题吗?我是C和编程的新手,我很难理解这一点。

这是我的其余代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cstdlib>
int main ()
{
   char ans[100];
   int count;
   count=0;
   char *arr[100];
   char *srtarr[100];
   while(count<100)
   {
      if(strcmp(ans,"done\n")!=0)  
      {               
         printf("Enter names when done type done:");
         fgets(ans,100,stdin);
         arr[count]=strdup(ans);
      }
      printf("%s",arr[count]);
      count++;

   }
   system("pause");
   return 0;   
}

2 个答案:

答案 0 :(得分:1)

由于您遇到逻辑错误,程序崩溃了。

看看你的while循环。

while(count<100)
{
   if(strcmp(ans,"done\n")!=0)  
   {               
      printf("Enter names when done type done:");
      fgets(ans,100,stdin);
      arr[count]=strdup(ans);
   }
   printf("%s",arr[count]);
   count++;
}

假设用户已输入

done

作为第一行输入。没有任何内容设置为arr[1]。那时,arr[1]未初始化。它指向垃圾。这将导致行

中的未定义行为
   printf("%s",arr[count]);

您需要对while循环进行一些重新排列。

while(count<100)
{
   printf("Enter names when done type done:");
   fgets(ans,100,stdin);
   if(strcmp(ans,"done\n") ==0 )  
   {               
      break;
   }

   arr[count]=strdup(ans);
   printf("%s",arr[count]);
   count++;
}

答案 1 :(得分:-1)

有几种方法可以做到这一点:

for (int i = 0; i < 100; i++) {
     arr[i] = NULL;
}

或巧妙的方式:

memset(arr, 0, sizeof(arr));

聪明的方法只是一次将0写入所有元素。