Странные ошибки с Visual C ++ - PullRequest
1 голос
/ 14 мая 2011

Хорошо, пока это мой код

int main()
{
    char buffer[10];
    int arraySize = -1;
    FILE *fp;
    int i;  
    char filename[10];
    int userNo = 1;
    char stockArray[18][15];
    sprintf(filename, "file%d", userNo);
    fp = fopen(filename, "r");
    while(fgets(buffer, 30, fp) != NULL)
    { 
        if(buffer[0] == '<' && buffer[1] == 's')
        {
            arraySize++;
        }
        else if(buffer[0] == '<' && buffer[1] == '/'){printf("< char\n");}
        else
        {
            int t = 0;
            int r = 0;
            while(buffer[t] != '>')
            {
                t++;
            }
            t++;
            char holder[15] = {'\0'};
            while(buffer[t] != '<')
            {
                holder[r] = buffer[t];
                t++;
                r++;
            }
            strncpy(stockArray[arraySize], holder, r);
            printf("%s\n", stockArray[arraySize]);
        }
    }
    fclose(fp);
}

У меня две странные проблемы.Сначала, когда я выполняю оператор printf, он печатает правильные данные очень хорошо, затем делает следующее: если первое слово - «банан», а следующее - «123», он печатает «123ana», а затем набор странных символов, которыезаканчивается, я не шучу, смайликом.

Затем, после того, как программа закончена и завершена, я получаю «Ошибка проверки времени выполнения # 2 - стек вокруг переменной« имя файла »поврежден."ошибка.

Я использую VS2010 и C ++, и весь мой опыт до сих пор был с GCC и C, где я никогда раньше не сталкивался с этими проблемами.Любой совет будет оценен

Ответы [ 3 ]

7 голосов
/ 14 мая 2011

Ваш входной буфер имеет длину 10 символов

char buffer[10];

Но затем вы говорите fgets прочитать до 30 символов в буфер

fgets(buffer, 30, fp)

Это может быть "забавно"эффекты!

2 голосов
/ 14 мая 2011

При визуальном осмотре я узнал одну вещь: ваш holder не имеет нулевого завершения.Вы можете добавить строку

holder[r++] = '\0';

после цикла while.

0 голосов
/ 14 мая 2011

Очень трудно указать на проблему, не понимая, что именно вы делаете и что содержит файл.

Но я все же предлагаю одну вещь и попробуйте:* В общем, убедитесь, что все ваши c-строки заканчиваются нулем.Или же вы столкнетесь с обычной проблемой, возникающей из-за отсутствия нулевого символа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...