PDA

View Full Version : [C++] problema stringhe \0


Reflex86
11-07-2008, 10:38
Ciao a tutti,
sto riscontrando un problema un po' anomalo, di cui non capisco il motivo. Il codice è il seguente:

#include <cstring>
#include <string>
#include <iostream>
using namespace std;

char* toUpper(char* str){
char* cur = str;
while (*cur!= '\0')
{
*cur = toupper(*cur);
cur++;
}
return str;
}

int main()
{
char * b = "prova";
cout << toUpper(b) << endl;
system("pause");
}



In fase di compilazione tutto ok, in fase di esecuzione lancia una eccezione e si blocca. Non riesco a capirne il motivo, sapreste aiutarmi? Anche se levo la funzione toupper e metto una assegnazione qualunque, tipo *cur = 'a'; fa lo stesso.

La funzione dovrebbe modificare la stringa passata in input e restituire un puntatore alla stringa stessa

ndakota
11-07-2008, 10:48
edit

marko.fatto
11-07-2008, 11:04
non so se dico una cazzata ma la stringa b ha il terminatore? :fagiano:
cioè non dovrebbe essere:
char * b = "prova\0";:stordita:

DanieleC88
11-07-2008, 12:14
Non è una questione di terminatore, le stringhe definite in quel modo vengono terminate automaticamente dal compilatore. Il problema sembra essere che in questo modo la stringa è definita costante.

Prova così:
char b[] = "prova";
e vedrai che funzionerà, perché i dati ti saranno scritti sullo stack durante l'inizializzazione della funzione.

Usando invece:
char *b = "prova";
i dati della variabile vedo che mi vengono scritti da GCC nella sezione .rodata, che è per i dati inizializzati in sola lettura... :)

Reflex86
11-07-2008, 13:44
Perfetto ora funziona, grazie mille :D