Я использую функцию gets() для получения строки, введенной пользователем. Затем я сохраняю эту строку в массиве символов char transdestmp[DESMAX], где DESMAX равен 31. Если имя_переменной больше 30 символов, попросите пользователя взять другую строку. В противном случае скопируйте строку с помощью strcpy() в двумерный массив char - acctdes[31][20].
accttitle получает transdestmp[DESMAX]
void accttitle(char descr[DESMAX])
{
printf("\nEnter title for new account %d: ", transinpt);
gets(descr);
while(strlen(descr)>DESMAX){
printf(" **Title entered is longer than 30 characters\n");
printf(" Please reenter : ");
gets(descr);
}
strcpy(acctdes[transcntr],descr);
printf("---->vacctdes[transcntr]: %s\n", acctdes[transcntr]);
printf("---->vacctdes[transcntr-1]: %s\n", acctdes[transcntr-1]);
}
По какой-то причине, когда я ввожу длинную строку, а затем ввожу другую строку, кроме второй строки, acctdes[1] перезаписывает другую строку, хранящуюся в acctdes[0].
Например,
Первый ввод: acctdes[0] = "Это длинная строка"
Оно работает...
Второй ввод acctdes[1] = "обезьяна"
Оно работает...
но тогда кажется, что когда я вывожу acctdes[0], acctdes[0] имеет часть значения из acctdes[1]... например, вывод - это длинный монах...
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Заранее спасибо.
transcntr
равно нулю, вы также получите доступ кacctdes[-1]
, который не является частью массиваacctdes
. - person Some programmer dude   schedule 02.12.2012gets()
. Его интерфейс не подлежит ремонту и удален из последнего стандарта C. Вместо этого используйтеfgets()
. - person ninjalj   schedule 03.12.2012