nimlot20 Temat założony przez niniejszego użytkownika |
Alokacja, struktury i wskazniki. » 2012-10-13 17:30:37 Czesc, napisalem program, w ktorym mam strukture raz. I chcialbym, przydzielic pamiec dla chara. Chyba wszystko dobrze zrobilem, ale printf wypisuje mi dziwne rzeczy zamiast slowa 'miki'. Prosze o pomoc w poprawieniu kodu, bo glowkuje juz dosc dlugo. :( #include <stdio.h> #include <stdlib.h> #include <string.h>
struct str { int a; char * wyraz; };
int main() { struct str * raz; char text[] = "miki"; raz =( str * ) malloc( sizeof( str ) ); raz->wyraz =( char * ) malloc( sizeof( char ) * strlen( text ) ); strncpy( raz->wyraz, text, sizeof( char ) * strlen( text ) ); printf( "%s", raz->wyraz ); }
|
|
cyklopek11 |
» 2012-10-13 18:20:39 strlen() zwraca długość C-stringu bez końcowego nulla ... raz->wyraz =( char * ) malloc( sizeof( char ) *( strlen( text ) + 1 ) ); strncpy( raz->wyraz, text, sizeof( char ) *( strlen( text ) + 1 ) ); ...
|
|
nimlot20 Temat założony przez niniejszego użytkownika |
» 2012-10-13 21:26:20 Dzieki, za zainteresowanie i pomoc. Moglbys/moglibyscie jeszcze mi pomoc z jedna rzecza. Co zrobic, jesli slowo 'miki'(albo inne) chce, zeby definiowal uzytkownik. Tutaj moj kod. #include <stdio.h> #include <stdlib.h> #include <string.h>
struct str { int a; char * wyraz; };
int main() { struct str * raz; char *text; scanf("%s", &text); raz =( str * ) malloc( sizeof( str ) ); raz[0].wyraz =( char * ) malloc( sizeof( char ) * strlen( text ) + 1 ); strncpy( raz[0].wyraz, text, sizeof( char ) * strlen( text ) + 1 ); printf( "%s", raz->wyraz ); }
|
|
cyklopek11 |
» 2012-10-13 21:59:12 funkcja scanf()z stdio.h. Ja bym jednak sugerował przepisanie kodu na C++ i wczytywanie do std::stringu. Po prostu operacje na std::stringu to czysta przyjemność. |
|
nimlot20 Temat założony przez niniejszego użytkownika |
» 2012-10-13 22:08:23 Tak, ale ten program ma byc w C. Wiec masz moze jakis pomysl? :) EDIT: wystarczy tylko zamieni jedna linie i wszystko gra. To: char *text; na to: char text[20]; EDIT2: Ale mam wrazenie, ze zle zaalokowana jest pamiec. Bo po wpisaniu printf( "%d", sizeof(raz[0].wyraz) ); zawsze pokazuje 4. Hmm? |
|
cyklopek11 |
» 2012-10-13 22:44:40 #include <stdio.h> #include <stdlib.h> #include <string.h>
struct str { int a; char * wyraz; }; int size;
int main() { puts( "Jaka ma byc dlugosc C-stringa?" ); scanf( "%d", & size ); char * tempString =( char * ) malloc( sizeof( char ) *( size + 1 ) ); puts( "Wprowadz C-string" ); scanf( "%s", tempString ); if( strlen( tempString ) > size ) { puts( "Wprowadziles dluzszy wyraz niz obiecywales, popraw sie" ); return 1; } struct str * raz; raz->wyraz = tempString; tempString = NULL; printf( "%s", raz->wyraz ); return 0; }
|
|
nimlot20 Temat założony przez niniejszego użytkownika |
» 2012-10-13 22:55:35 Dzieki jeszcze raz za zaangazowanie, ale ten kod sie nie kompiluje.
I moze doprecyzuje co ma robic program. Uzytkownik podaje wyraz. A program umieszcza go w miejscu raz[0].wyraz. Wczesniej wyznacza mu pamiec, tak, zeby slowo zabieralo minimum potrzebnej pamieci. Aczkolwiek ten algorytm, ktory ty chcesz zrobic jest spoko. Ja chce zrozumiec C a nie to jak zaimplementowac dany algorytm. :) |
|
cyklopek11 |
» 2012-10-13 23:04:50 Musisz dodać do projektu wyrażenie: -std=c99 aby "łykał" kod zgodnie ze standardem c99 |
|
« 1 » |