Разбираемся с этим неустойчивым поведением в gdb

Рассмотрим следующий код:

#include <stdio.h>
#include <ctype.h>

char* Mstrupr(char* szCad); 

int main()
{
    char szCadena[] = "This string should print well.";
    printf("%s\n", Mstrupr(szCadena));
    printf("%s\n", Mstrupr("This string should fail."));
    return 0;
}

char* Mstrupr(char* szCad) 
{
    int i;
    for (i=0; szCad[i]; i++) 
        szCad[i] = toupper(szCad[i]);
    return szCad;
}

Второй вызов Mstrupr не работает правильно в Linux, так как он получает строку как литерал (а не как массив символов) . Когда вся программа запускается на gdb, она также терпит неудачу, но когда точка останова добавляется к main и программа запускается с помощью следующей команды gdb, вторая строка становится заглавной и печатается. Почему? Я считаю этого не должно быть, но мой инструктор настаивает, что это часть дизайна GDB.

5
задан andandandand 27 September 2010 в 17:48
поделиться