2015-09-19 5 views
1

У меня возникла ошибка при запуске этого кода. Там будут «окна остановки работы», как только он достигнет цикла для сканирования для ввода пользователем для имен («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; 
     } 
+0

Избегайте 'get', поскольку она не обеспечивает защиту от переполнения буфера. Вместо этого используйте 'fgets':' fgets (t, sizeof (t), stdin); ' –

ответ

1

Это:

scanf_s("%s", &nameptr[i]); 

должно быть

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])); 

потому что %s в scanf_s ожидает, что третий аргумент, обозначающий максимальную imum size используемого аргумента строки. Более подробную информацию об этом можно найти на странице msdn documentation of scanf_s

+0

Спасибо! Теперь работает! Могу ли я узнать, что такое 3-й параметр для scanf_s и когда нужно его использовать? – Jackelll

+0

@Jackelll Третий параметр - предотвратить [переполнение буфера] (https://en.wikipedia.org/wiki/Buffer_overflow). Это необходимо при использовании '% s','% c' и '% ['. В противном случае это не требуется. –

+0

Я вижу! Понял, спасибо всем! – Jackelll

Смежные вопросы