2016-08-11 12 views
0

リンクリストをトラバースしています。私はリンクリストの各ノードのstrlenを探したいだけです。リンク文字列の長さリンクリストの1ノードの長さ

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

今トラバースし、リンクリストの各ノードのstrlenを見つける:ここ

はノードです。

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

私は

strlen(ptr->HuffmanCodes) 

が可能であるかどうかわかりません。 私はこのコードを実行します。実行時に動作を停止しました。 間違いはどこですか?

答えて

0

ちょっと考えてみましょう。 ptr->HuffmanCodeslongの整数の場合、strlen(ptr->HuffmanCodes)を実行してその値をintに割り当てるかどうかを確認しています。なぜこれをテストして(と警告に注意を払う)だけではないのですか?基本的に、あなたはlongの文字列の長さ(とstrlenは通常文字列で使用されている)を検索しようとしているので

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

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

は、我々は簡単なプログラムを持っていると言います。

は、ここでは、これをコンパイルしようとすると何が起こるかです:strlenconst char *を期待し、我々はlongを渡しているので、

 
[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. 

は明らかに、不一致があります。あなたはこれをすることはできません。さらに、出力:

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

は、その後、あなたは最初の場所でそれがセグメンテーションフォールトを起こしintにこの値を代入してみてください。

かなり簡単に:strlen(ptr->HuffmanCodes)は法的声明ではありません。なぜ文字列の長さをlong intにしようとしているのかわかりません。

+0

を見つけるためには、どうもありがとうございました。 – Mohit

+0

@Mohit Glad私は助けることができる:-) – iRove

0

strlen()は、文字列/文字配列に対してのみ使用されます。

sizeof(struct node)を使用するよりも各ノードの長さを調べたい場合。

かのsizeof HuffmanCodes使用にsizeof(ptr->HuffmanCodes);