Arrays 在C语言中将字符串读入2D字符串数组

Arrays 在C语言中将字符串读入2D字符串数组,arrays,c,Arrays,C,假设我有一个格式为ar[I][j]的二维字符串数组,其中I指数组中的第I个字符串,j是该字符串中某个字符的特定索引。我希望创建一个函数,从用户那里获取大小(名称的数量),并让他们输入以空格分隔的名称。以下是我对该函数的尝试: void readNames(char nameptr[][80], int *size) { int i; char dummychar; printf("Enter size:\n"); scanf("%d&quo

假设我有一个格式为ar[I][j]的二维字符串数组,其中I指数组中的第I个字符串,j是该字符串中某个字符的特定索引。我希望创建一个函数,从用户那里获取大小(名称的数量),并让他们输入以空格分隔的名称。以下是我对该函数的尝试:

void readNames(char nameptr[][80], int *size)
{
   int i;
   char dummychar;

   printf("Enter size:\n");
   scanf("%d", size);
   scanf("%c", &dummychar);
   printf("Enter %d names:\n", *size);
   for ( i = 0; i < size; i++)
   {
       scanf("%s", &nameptr[i]);
   }
   printf("Test?");

}
在此之后,传递到函数nameptr中的数组应具有以下值:

nameptr[0] = "Sam\0"
nameptr[1] = "Paul\0"
nameptr[2] = "John\0"
nameptr[3] = "Mary\0"
nameptr[4] = "Nick\0"

但是,在最后一个scanf步骤中似乎出现了一些错误,因为程序只是超时,并且没有打印最后一条测试语句。我不确定这是否是语法错误,也不确定在这种情况下如何正确地扫描到字符串的2D数组中。非常感谢您提供的任何帮助和见解。

事实证明,错误在于:

   for ( i = 0; i < size; i++)
for(i=0;i
我已经通过指针将大小传递给函数,所以应该是

for ( i = 0; i < *size; i++)
for(i=0;i<*size;i++)

并且该函数按预期工作。感谢阅读。

您可能需要检查输入的
*size
值是否小于或等于数组中可用的行数。始终检查
scanf(“%d”,大小)的返回--如果没有验证,您将与未定义的行为相差1个字符。
for ( i = 0; i < *size; i++)