指针字符串未在C编程中接受输入 #包括 int main() { int w,p; 字符*名称[1000]; 对于(w=0;p!=2;w++) { printf(“添加名称:”); 获取(名称[w]); printf(“要添加另一个吗?\n1表示是\n2表示否”); scanf(“%d”和“p”); } }

指针字符串未在C编程中接受输入 #包括 int main() { int w,p; 字符*名称[1000]; 对于(w=0;p!=2;w++) { printf(“添加名称:”); 获取(名称[w]); printf(“要添加另一个吗?\n1表示是\n2表示否”); scanf(“%d”和“p”); } },c,C,此代码不起作用。如果我写: char*name[3]={“Mitchell Johnson”、“Mitchell Starc”、“Steven Smith”}; 然后它就起作用了。但是我想把字符串作为输入。我不想给它下定义。 但控制台框在接受1个字符串输入后停止工作。如何做对?请帮忙。谢谢。您忘记为读取的字符串分配内存: #include<stdio.h> int main() { int w,p; char *name[1000]; for(w=0; p!=2;

此代码不起作用。如果我写: char*name[3]={“Mitchell Johnson”、“Mitchell Starc”、“Steven Smith”}; 然后它就起作用了。但是我想把字符串作为输入。我不想给它下定义。
但控制台框在接受1个字符串输入后停止工作。如何做对?请帮忙。谢谢。

您忘记为读取的字符串分配内存:

#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);
   }
}
#包括
int main()
{
int w,p=0;
字符*名称[1000];
字符行[1024];
对于(w=0;p!=2;w++)
{
printf(“添加名称:”);
fgets(第1024行,标准输入);
name[w]=malloc(strlen(line)+1);//添加此
strcpy(名称[w],行);//添加此
printf(“要添加另一个吗?\n1表示是\n2表示否”);
scanf(“%d”和“p”);
}
}
请注意,您必须初始化
p
;它可能已经是2了。

\include
#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);
   }
}
#包括 #包括 #包括 int main() { int w=0; int-ret=0; int p=1; 字符行[1024]; 字符**标签=(字符**)malloc(1000*sizeof(字符*); 对于(w=0;p=1;w++) { printf(“添加名称:”); ret=读取(0,&行,1024); 行[ret]=0; printf(行); 制表符[w]=标准值(行); printf(“要添加另一个吗?\n1表示是\n2表示否”); scanf(“%d”和“p”); } }

这应该是你想要的。但这很难看。

你应该解释你的目标是什么:存储多个字符串或用不同的字符串覆盖单个缓冲区?@LPs
pOK,免责声明:“我没有报告其他错误(尽管我可以看到一些错误)”,更好的做法是使用fgets而不是gets。很抱歉,这不起作用……请检查?我急需我的项目的解决方案杰克,使用调试器。我觉得你的“项目”就是家庭作业。学习使用调试器会教你很多东西。阅读scanf的文档。我指的是gets…;)谢谢,它很管用!!但我不明白这是怎么回事。你能简化吗?我是C编程的初学者。请你能通过做一些修改使我的代码(我在问题中包含的代码)正常工作吗?@Adder是的,这就是为什么我说它很难看的原因。关于代码,它非常简单:首先,我创建所有我需要的东西并初始化它(非常重要!)。字符行[1024]只是一个缓冲区,我将在其中写入写入的行。char**tab是一个数组,我们在其中复制末尾的最后一行(即w)。您可以在Man2或web上的某个地方找到read函数,它返回读取的字符数。这就是为什么我在最后一个字符后面添加一个0,行[ret]=0;tab[w]=strdup(line)只是分配内存并复制数组中w位置的字符串行。顺便说一句,如果键入的字符串计数超过1024个字符,它将被截断,如果输入的行数超过1000行,它可能会崩溃。为了避免这种情况,您需要创建一个比上一个更大的字符串数组,并将上一个数组复制到新数组中,然后使用新数组。谢谢。现在我开始明白了
#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);
   }
}