1

私はすでに他の質問などを見てきましたが、編集できないstrtokの最初の引数を使用できないことを確認しましたが、このコードには含まれていないと思いますが、それでもセグメンテーション違反が発生しますか?strtokを間違って使用していますか?

このコードは、csvコンマ区切り形式でstdinを取得し、stdinから数字を追加して、それらをstdoutに出力します。たとえば、トークンがポインターではない場合に機能していました。i+= token;しかし、私は予想通りランダムな出力を得ていました。

#include <stdio.h>
#include <string.h>
int main(){
char *token, input[256];
int i = 0;

scanf("%s" , input);
token = strtok (input, ",");

while(token != NULL){
    token = strtok(NULL, ","); 
    i += *token;

        }                

printf("%d\n", i);
return 0;
    }

ありがとうLachlan

4

2 に答える 2

7

ある時点で、チェックしないものstrtokが返さNULLれます。

token = strtok(NULL, ","); 
i += *token; /* Will dereference NULL. */

代わりに、次のことを行う必要があります。

while(token != NULL){
    i += *token; /* We know `token` isn't NULL. */
    token = strtok(NULL, ","); 
}

ちなみに、あなたがしていること(文字値の追加)はほとんど意味がありません。おそらくを使用して、何らかの方法でそれらを変換する必要がありますstrto(u)l

于 2012-04-13T08:19:48.693 に答える
0

を実行する前に文字列を整数に変換する必要があります。文字列を整数に変換するi+=*token関数などを見てください strtol

于 2012-04-13T08:21:26.160 に答える