Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读取用户输入并存储到数组时出错_C_Arrays_Scanf - Fatal编程技术网

C 读取用户输入并存储到数组时出错

C 读取用户输入并存储到数组时出错,c,arrays,scanf,C,Arrays,Scanf,我在运行此代码时遇到错误。一旦到达循环以扫描用户输入的名称(“scanf_s(%s)”,&nameptr[i]),就会出现一个“程序停止工作”窗口。 任何帮助或建议都将不胜感激 #include <stdio.h> #include <string.h> #define SIZE 10 int findTarget(char *target, char nameptr[SIZE][80], int size); int main() { char nam

我在运行此代码时遇到错误。一旦到达循环以扫描用户输入的名称(“scanf_s(%s)”,&nameptr[i]),就会出现一个“程序停止工作”窗口。 任何帮助或建议都将不胜感激

#include <stdio.h>
#include <string.h>
#define SIZE 10
int findTarget(char *target, char nameptr[SIZE][80], int size);

int main()
    {
    char nameptr[SIZE][80];
    char t[40];
    int i, result, size;
    printf("Enter no. of names: ");
    scanf_s("%d", &size);
    printf("Enter %d names: ", size);


    for (i = 0; i < size; i++) 
            scanf_s("%s", &nameptr[i]); 

    printf("Enter target name: ");
    scanf_s("\n");
    gets(t);
    result = findTarget(t, nameptr, size);
    printf("findTarget(): %d\n", result);

    return 0;

    }

    int findTarget(char *target, char nameptr[SIZE][80], int size)
      {
      int i;
      for (i = 0; i<size; i++) {
      if (strcmp(nameptr[i], target) == 0)
        return i;
        }
    return -1;
      }
#包括
#包括
#定义尺寸10
int findTarget(char*target,char nameptr[SIZE][80],int SIZE);
int main()
{
字符名ptr[SIZE][80];
chart[40];
int i,结果,大小;
printf(“输入名称编号:”);
扫描单位(“%d”和大小);
printf(“输入%d个名称:”,大小);
对于(i=0;i
应该是

scanf_s("%s", nameptr[i], sizeof(nameptr[i])); 
/* Or better */
scanf_s("%79s", nameptr[i], sizeof(nameptr[i])); 


因为
scanf_s
中的
%s
需要第三个参数来表示所用字符串参数的最大大小。有关这一点的更多信息,请访问谢谢!它现在可以工作了!我可以知道第三个参数对scanf_s有什么用途以及何时需要使用它吗?@jackell第三个参数是为了防止。I使用
%s
%c
%[
时需要t。否则,不需要t。避免
获取
,因为它不提供任何缓冲区溢出保护。请改用
fgets
fgets(t,sizeof(t),stdin);
scanf_s("%s", nameptr[i], sizeof(nameptr[i])); 
/* Or better */
scanf_s("%79s", nameptr[i], sizeof(nameptr[i])); 
scanf_s("%s", nameptr[i], _countof(nameptr[i])); 
/* Or better */
scanf_s("%79s", nameptr[i], _countof(nameptr[i]));