Toon posts:

[C]Rare waarden in array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik haal tekst data van een socket, en wil deze totaan \n in een char * stoppen. Een readLine dus.
Dit werk behalve dan dat mijn array veel te lang word en er allemaal bagger instaat (er komt zoiets uit als "blaat=ΘΘΘΘΘΘ" als ik alleen "blaat\n" verzonden heb over de socket). Ik kan alleen het probleem niet vinden.

Code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
char * readLine(SOCKET theSocket)
{
    char buffer;
    int bytesReceived;
    int counter = 0;
    char * temp = new char[4096];
    while (true) {
        bytesReceived = recv(theSocket, &buffer, 1, 0);
        if (buffer == '\n' || counter > 4090) {
            char *pChar = new char[counter];
            memset(pChar, 0, counter);
            for (int f = 0; f < (counter); f++) {
                pChar[f] = temp[f];
            }
            delete [] temp;
            return pChar;
        } else {
            temp[counter] = buffer;
            counter++;
        }
   }
    
}


Iemand een idee waar het fout gaat?

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:09
Moet je een char array niet afsluiten met een NULL (\0) en dan dus lezen tot aan die \0 ?

https://fgheysels.github.io/


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Strings in C worden geterminate met een '\0'. Die zie ik nergens staan dus je string houdt in essentie nergens op.

whoami: een \0 is geen NULL :) '\0' is een byte met nul-waarde, NULL is een pointer naar 0x00.

[ Voor 34% gewijzigd door CyBeR op 04-02-2005 16:20 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 09:35

Creepy

Tactical Espionage Splatterer

Hoe druk je je waarde af? Een normale string eindigt namelijk met een \0 en niet met een \n. Ik gok dat als je je *pchar 1 karakter groter maakt dan temp en als laatste een \0 erin zet het probleem opgelost is.

offtopic:
* Creepy is spuit 12....

[ Voor 11% gewijzigd door Creepy op 04-02-2005 16:20 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
*slaat hoofd op toetsenbord*

idd \0 vergeten :/

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
CyBeR schreef op vrijdag 04 februari 2005 @ 16:19:
whoami: een \0 is geen NULL :) '\0' is een byte met nul-waarde, NULL is een pointer naar 0x00.
whoami is dichterbij. NULL is geen pointer naar iets, maar de null-pointer. Da's typisch (void*)0. Je kunt dat adres niet lezen, en je kunt er niet naar schrijven. \0 is net zoiets, dat is (char)0. Andere type cast, zelfde principe.

Oude Solaris bakken gebruikten NULL als /dev/null, dus reads gaven idd 0x00 en writes gingen door het putje, maar dat is al meer dan 10 jaar geleden afgeschaft daar.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1