指针字符串在C编程中没有输入

时间:2017-03-23 14:09:00

标签: c

#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个字符串后控制台盒停止工作。怎么做对了?请帮忙。感谢。

2 个答案:

答案 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。