2017-04-20 5 views
0

文字列の特定の要素にアクセスしようとすると、セグメンテーションが問題になります。具体的には、私は '経度'の終わりに手紙を決定し、それが 'W'かどうかをチェックしようとしています。しかし、私はstrcmpの部分に到達する前にクラッシュすることになります。 は、ここでは、コードです:文字列に要素を配置してCで比較する

また
int main{ 
    int Val; 
    char longitude[20] = "081-28-23.2590W"; 
    char direction = longitude[14];   //pretty sure it's crashing on this line 

    printf("%s\n", direction);    //this does not print 

    Val = strcmp(direction, "W");   //And I think this is right, but not sure 
    if(Val==0) 
    { DO STUFF;} 
    else{DO MORE STUFF} 
} 

、私はそれがそこに着く前に、プログラムがクラッシュしたとしてstrcmpの一部が、正しいかどうかさえわかりません。私は間違って何をしていますか?

答えて

2

printf("%s\n", direction);問題があります。

directionは単一の文字ですが、%sは030で終了する文字列を期待するようにprintfに指示します。

また、標準の命名規則は、( 'W' 0/falseを返すのでstrcmp)よりisEastようvalないVal、そしておそらくものになるだろう。 私はあなたが正しいmain() { ... }を持っていると仮定します - あなたの質問は間違っています。実際のコードを切り取って貼り付けて、人々が赤ちゃんに対処しないようにしてください。

@Kaylumが指摘しているように、私はstrcmpで同じ問題を抱えていました.2文字列を1文字と1文字列で比較しています。この場合、strcmpの代わりにisWest = (direction == 'W');と言うことができます。

完全性のために、char *direction = &longitude[14];と言って "そのまま"残すことができます。directionは0の終了文字列であるため、printfとstrcmpが機能します。私は...これは良い解決策ではないことをお勧め

+0

は、明確化のためにありがとう、はい、メイン()は、実際のコードで正しいです。そして@Kaylumsと一緒にあなたの提案は完璧に働き、非常に役に立ちました。私は実際のコードが非常に長いので、コードのより単純なバージョンを作成しようとしました。 –

0

私は「経度」

char longitude[20] = "081-28-23.2590W"; 
//... 
size_t n = strlen(longitude); 
char direction = n == 0 ? '\0' : longitude[n-1]; 

// ... 
printf("%c\n", direction);    
     ^^^   

の末尾に文字を決定し、それはだかどうかを確認しようとしています " W」か

if (toupper((unsigned char)direction) == 'W') 
{ 
    //... 
} 
else 
{ 
    //... 
} 
関連する問題