2017-04-20 30 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告訴printf預期0結束字符串。

此外,標準命名約定將是val而不是Val,或許更像isEast(因爲strcmp對'W'返回0/false)。 我假設你已經得到了正確的main() { ... } - 你的問題有錯。您應該剪切並粘貼真實的代碼,以避免人們觸及紅鯡魚。

由於@Kaylum指出,我strcmp其中比較兩個字符串不是一個字符和一個字符串錯過了同樣的問題。在這種情況下,您可以僅使用isWest = (direction == 'W');而不是使用strcmp

爲了完整起見,您可以將其全部保留爲「原樣」,現在稱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 
{ 
    //... 
} 
相關問題