我无法使用scanf将名称输入到char数组中

我无法使用scanf将名称输入到char数组中,c,arrays,for-loop,char,scanf,C,Arrays,For Loop,Char,Scanf,我无法使用scanf在stdnames数组中输入名称。 编译时没有错误,但只要输入名称和 然后按enter键写入另一个名称,它将显示错误并关闭程序。 我该怎么做呢 int main(int argc, char* argv[]) { float marks[50]; /*char *stdnames[100]={"Arvind Thillainathan","Robert Lang"};*/ //I want to stores names like the above one c

我无法使用scanf在stdnames数组中输入名称。 编译时没有错误,但只要输入名称和 然后按enter键写入另一个名称,它将显示错误并关闭程序。 我该怎么做呢

int main(int argc, char* argv[])
{
  float marks[50];
  /*char *stdnames[100]={"Arvind Thillainathan","Robert Lang"};*/
 //I want to stores names like the above one
  char *stdnames[100];
  int totalNames = 0;
  int i = 0, w=0,h=0;

 printf("How many names do you want to enter ??\n");
 scanf("%d",&totalNames);
 assert(totalNames != 0);

 for(int count = 0; count < totalNames; count++)
 {
     printf("Enter name of student\n");
     scanf("%s",stdnames[count]);
 //From here the problem starts
 }
 getres(marks,totalNames);

 for(i = 0; i < totalNames; i++) 
      {
        int v = 1;
        printf("\n");
        printf("IELTS Marks of %s\n\n",stdnames[i]);
        for(h = w; h < w+5; h++)
           {
            if(v==1)
            {
                printf("Listening : %0.1f\n", marks[h]);
            }
            else if(v==2)
            {
                printf("Reading   : %0.1f\n", marks[h]);    
            }
            else if(v==3)
            {
                printf("Writing   : %0.1f\n", marks[h]);    
            }
            else if(v==4)
            {
                printf("Speaking  : %0.1f\n", marks[h]);    
            }
            else
            {
                printf("Overall   : %0.1f\n\n", marks[h]);
            }
            v++;
            //if(h==10)
            //{
            //  break;
            //}
        }
        w+=5;
}
return 0;
}
intmain(intargc,char*argv[])
{
浮标[50];
/*char*stdnames[100]={“Arvind Thillainathan”,“Robert Lang”}*/
//我想储存像上面那样的名字
char*stdnames[100];
int totalNames=0;
int i=0,w=0,h=0;
printf(“您想输入多少个名称?”\n);
scanf(“%d”、&totalNames);
断言(totalNames!=0);
对于(int count=0;count
作者

您得到了一个数组(指向char的指针)

下一个大问题是

谁将为每个指针分配内存

一个小的答案是——你必须像下面这样自己做:

stdnames[count]=malloc(100*sizeof(char)); // You may replace 100 with desired size

您需要将此行放在
scanf
语句之前

注意:一旦这些变量变得不相关,不要忘记释放分配的内存。像这样做:

free(stdnames[count]);

您正在扫描未分配的对象
stdnames[count]
。也许可以先尝试在那里分配一些内存,比如说
malloc
当你有
char*stdnames[100]虽然输入标记的循环有点模糊。没有“字符数组”。你是指指向“<代码> char < /c> >的数组指针?@ AvnDead Dister-TyelaaNe:考虑代码中的<代码> GETES(标记,总名)的定义。而且
sizeof(char)
是无用的,因为它除了
1
@Olaf:也伤害了我之外,永远不会产生其他东西。改变:DThanks(对我来说还是有点太吵了,但我能忍受——无论如何都得读Word文档和PPT)。内容还有其他问题。嗯,这是正确的(与类型无关),但实际上我想知道为什么不删除这个词?@sjsam谢谢,它工作得很好。我刚开始C。malloc的确切目的是什么?
stdnames[count]=malloc(100); // sizeof(char) is almost always 1
free(stdnames[count]);