2016-08-11 3 views
0

Ich fahre die verkettete Liste durch. Ich möchte nur strlen von jedem Knoten der verknüpften Liste finden.String-Länge eines Knotens der verketteten Liste finden

Hier ist der Knoten:

struct node 
    { 
     long HuffmanCodes; 
     struct node *next; 
    }; 
    struct node *head = NULL; 
    struct node *current = NULL; 

Jetzt Verfahrgeschwindigkeit und die Suche nach strlen jedes Knotens der verknüpften Liste.

int HuffmanCodeslength = 0; 
struct node *ptr = head; 
while(ptr != NULL) 
{ 
    HuffmanCodeslength = strlen(ptr->HuffmanCodes); 
    ptr = ptr->next; 
} 
ptr = head; 

Ich weiß nicht,

strlen(ptr->HuffmanCodes) 

möglich ist oder nicht. Wenn ich diesen Code ausführen. Es hat auf Laufzeit nicht mehr funktioniert. Wo ist der Fehler?

Antwort

0

Lassen Sie uns für eine Sekunde darüber nachdenken. Sie fragen, ob es möglich ist, strlen(ptr->HuffmanCodes) zu tun und diesen Wert einer int zuzuteilen, wenn ptr->HuffmanCodes eine long Ganzzahl ergibt. Warum nicht einfach das ausprobieren (und auf die Warnungen achten)?

Sagen wir das einfache Programm haben:

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    long myLongInt = 4873874; 
    printf("%zd\n", strlen(myLongInt)); 
    return 0; 
} 

Da im Grunde, Sie versuchen, die String-Länge eines long zu finden (und strlen wird in der Regel mit Strings verwendet).

Hier ist, was passiert, wenn wir versuchen, dies zu kompilieren:

 
[email protected] Stack Overflow $ gcc dynamic_testing.c 
dynamic_testing.c:6:26: warning: incompatible integer to pointer conversion passing 'long' to parameter of type 'const char *' 
     [-Wint-conversion] 
    printf("%zd\n", strlen(myLongInt)); 
         ^~~~~~~~~ 
/usr/include/string.h:82:28: note: passing argument to parameter here 
size_t strlen(const char *); 
          ^
1 warning generated. 

eindeutig ein Konflikt ist seit strlen eine const char * erwartet und wir Leiten eines long. Du kannst das nicht machen. Darüber hinaus ist die Ausgabe:

 
[email protected] Stack Overflow $ ./a.out 
Segmentation fault: 11 
[email protected] Stack Overflow $ 

Dann versuchen Sie diesen Wert zu einem int zuzuweisen, wenn in erster Linie eine Segmentierungsfehler verursacht.

Ganz einfach: strlen(ptr->HuffmanCodes) ist keine rechtliche Aussage. Ich verstehe nicht, warum Sie versuchen, die String-Länge von long int zu bekommen.

+0

Ihnen sehr danken. – Mohit

+0

@Mohit Froh ich könnte helfen :-) – iRove

0

strlen() wird nur für Zeichenfolgen/Zeichen-Array verwendet.

Wenn Sie die Länge jedes Knotens herausfinden möchten, müssen Sie sizeof (struct node) verwenden;

oder die sizeof HuffmanCodes Verwendung finden sizeof(ptr->HuffmanCodes);

Verwandte Themen