#include<stdio.h>
int main()
{
int w,p;
char *name[1000];
for(w=0; p!=2; w++)
{
printf("Add a name: ");
gets(name[w]);
printf("Want to add another one?\n1 for yes\n2 for no\n");
scanf("%d",&p);
}
}
此代码无效。如果我写: char * name [3] = {“Mitchell Johnson”,“Mitchell Starc”,“Steven Smith”}; 然后它工作。但我想把字符串作为输入。不想定义它。 但是在输入1个字符串后控制台盒停止工作。怎么做对了?请帮忙。感谢。
答案 0 :(得分:1)
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int w = 0;
int ret = 0;
int p = 1;
char line[1024];
char **tab = (char**)malloc(1000*sizeof(char*));
for(w=0; p==1; w++)
{
printf("Add a name: ");
ret = read(0, &line, 1024);
line[ret] = 0;
printf(line);
tab[w] = strdup(line);
printf("Want to add another one?\n1 for yes\n2 for no\n");
scanf("%d",&p);
}
}
这应该做你想要的。但它很难看。
答案 1 :(得分:0)
您忘记为字符串读取分配内存:
#include<stdio.h>
int main()
{
int w,p=0;
char *name[1000];
char line[1024];
for(w=0; p!=2; w++)
{
printf("Add a name: ");
fgets(line, 1024,stdin);
name[w]= malloc(strlen(line)+1); // add this
strcpy(name[w], line); // add this
printf("Want to add another one?\n1 for yes\n2 for no\n");
scanf("%d",&p);
}
}
请注意,您必须初始化p
;它可能已经是2。