Рассмотрим следующий код:
#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, поскольку он получает строку в виде литерала (а не в виде массива char).Когда вся программа запускается на GDB, она также дает сбой, но когда точка останова добавляется к основному и программа запускается с помощью следующей команды GDB, вторая строка пишется с заглавной буквы и печатается. Почему? Я полагаю, что так не должно быть, но мой инструктор настаивает на том, что это часть дизайна GDB.