2017-01-18 18 views
-1

次のようにすると、セグメンテーションフォルトが発生します。ポインタか他のものに対してテストしているかどうかわかりません問題。Cでn番目の文字をテストする正しい方法== "x"を関数に渡した文字列

4番目の文字がカンマの場合、正しいテスト方法は何ですか?

文字列は使用しません、関数にバッファを渡すにはabc,def,xyz

私も直接渡された文字列を使用してみましたが、している
char in[BUFFER] = {'\0'}; 
if ((in_fl = open(*fifofile, O_RDONLY)) == -1) 
    { 
    while (read(in_fl, in, BUFFER)>0) { 
     doParseInput(&in); 
    } 


void *doParseInput(char *inputread){ 
//copy string to use later.... 
char* theParsedString = calloc(strlen(inputread)+1, sizeof(char)); 
strcpy(theParsedString , inputread); 
if (strcmp(theParsedString[3], ",") == 0){ //causes seg fault 

もワンセグ

if (strcmp(inputread[3], ",") == 0){ //causes seg fault 
+0

'if(inputread [3] == '、'){'は* char *の比較方法です。 'strcmp()'は、*文字列*(nullバイトで終わる文字列)を比較するためのものです。 –

+0

関連[質問](https://stackoverflow.com/questions/10490636/compare-between-a-char-in-a-string-to-a-given-char)を参照してください。あなたはCの解決策を求めているので実際には重複していませんが、受け入れられた答えにはCもあります。 – qwattash

+1

[文字列内のcharと指定されたcharとの比較]可能な重複があります。http://stackoverflow.com/questions/10490636 /文字間比較(文字間比較) – qwattash

答えて

1

故障FIFOから読まれます&。代わりに

doParseInput(in); 

は、バッファの第四文字を比較するために、(インデックス== 3):

if (theParsedString[3] == ','){ 

が(むしろ二重引用符よりCharacter-Valueを意味し、一重引用符に注意してくださいこれは"String"を意味します)

+0

あなたは、バッファを渡すために&を使用しないように、なぜ "なぜ"、いくつかのドキュメントを展開したり指したりすることができます。 '&'と一緒に、そして作品なしで両方を使用して、私はそれを使用しないことの後ろの良い習慣を理解することに興味があり、thx Art –

0

まず、間違ったタイプの引数をdoParseInputに渡しています。それはchar *を期待しますが、あなたはそれをchar (*)[]に渡しています。あなたのコンパイラはこれを警告していたはずです。

もう1つの問題は、文字比較を使用して1文字を確認していることです。文字定数(二重引用符ではない一重引用符を使用)を使用して、配列メンバーと直接比較する必要があります。

if (theParsedString[3] == ',') { 
関連する問題