在元素中定位元素并在C中进行比较

时间:2017-04-20 22:59:18

标签: c arrays string strcmp

当我尝试访问字符串的特定元素时,我遇到了我认为是段错误的问题。具体来说,我试图确定“经度”末尾的字母并检查它是否为“W”。但是,在我到达strcmp部分之前,我最终崩溃了。 这是代码:

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 个答案:

答案 0 :(得分: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工作,可以“保持原样”。我认为这不是一个好的解决方案......

答案 1 :(得分: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
{
    //...
}