C i char* pointer[] ;

6 отговора 415 прегледа
#1

C i char* pointer[] ;

Zashto tova ne raboti ????

void redf(HWND hwnd)
{
FILE *infile;
char* sarray[10];

infile = fopen("1.ini","r");

if (infile == NULL)
{
MessageBox(hwnd,"ERROR OPEN FILE !!! \n CREATE NEW .INI FILE","!!!",MB_OK);

}
else
for (int i=0;i<10;i++)
{
sarray[ i]=" ";
if (fgets(sarray[ i],60,infile)== NULL)
sarray[ i]="!";

}
fclose(infile);


for (int i=0;i<10;i++)
{
MessageBox(hwnd,sarray[ i],"sarray[ i]",MB_OK);

}




}

efecta e takuv 4e v sarray[ i] - stringovete sa ednakvi (imat stoinost na poslednija validen vuveden ) - do nevalidnite "!"

Kude burkam v Ukazatelite v sarray[ i] ???

BLAGODARJA !!!

Отговор
в отговор на NK #2

Re: C i char* pointer[] ;

Щото в C не можеш да присвояваш стрингове като в Pascal. За един символ ползвай единични кавички, а за стринг - разни неща като strcpi. Специално за правене на празен низ е достатъчно да присвоиш '\0' в нулева позиция на стринга ( демек sarray[ i][0] = 0 ). Може и друго да има, ама първо оправи това.


System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
Отговор
в отговор на NK #3

Re: C i char* pointer[] ;

значи не видях никъде да резервираш памет и да инициализираш указателите. вероятно целият масив е пълен с еднакви стойности и при всяко четене се запълва ЕДНА И СЪЩА ПАМЕТ! ако е така, цяло чудо е че не гърми.

Отговор
в отговор на NK #4

Opitaj taka

char sarray[10][60];//Taka imas 10 stringa po 60 bytes
char Results[64];
int i;//Ako e obiknoveno C a ne C++ tuk triabva da deklariras i'to
infile = fopen("1.ini","r");

if (infile == NULL)
{
MessageBox(hwnd,"ERROR OPEN FILE !!! \n CREATE NEW .INI FILE","!!!",MB_OK);

}
else
for (int i=0;i<10;i++)
{
//sarray[ i]=" "; zadelias edin byte za pointera a iskash da chetesh 60 a i toj e vinagi edin i sasti!
if (fgets(sarray[ i],60,infile)== NULL)
{
sarray[ i][0]='!';
sarray[ i][1]=0;
}
}
fclose(infile);

for ( i=0;i<10;i++)
{
spirntf(Results,"sarry[%i]",i);//Tova e za da vidis i i'to
MessageBox(hwnd,sarray[ i],Results,MB_OK);
}

Отговор
в отговор на bira_more #5

Re: Opitaj taka

mda. samo che ako w faila ima redowe po-dylgi ot 58 (edin za '\n' i 1 za '\0' )
poznai kakyw intersen rezultat shte imash

Отговор
в отговор на bira_more #6

Re: Opitaj taka

MERSY !!!

Sega ve4e vurvi :)))
greshkata mi e bila 4e sum polzval char* parray[10]

//sarray[ i]=" "; zadelias edin byte za pointera a iskash da chetesh 60 a i toj e vinagi edin i sasti!
- prosto foruma taka go izkara :( ina4e se zadeljaha 60 !!!

BLAGODARJA !!!!

Отговор
в отговор на tt #7

prav si

трябваше в fgets да е 58 а не 60 или буферите да са по големи. То аз като си заделям памет ако ми трябват 60 байта ще си заделя 64 че е кръгло число :))))

Отговор