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;
}
答案 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写入所有元素。