c - 在字符串中定位一个元素并在 C 中比较它

标签 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 部分是否正确,因为程序在到达那里之前就崩溃了。我做错了什么?

最佳答案

printf("%s\n", direction); 是问题。

direction 是单个字符,而 %s 告诉 printf 期望一个以 0 结尾的字符串。

此外,标准命名约定是 val 而不是 Val,也许更像 isEast(因为 strcmp 为“W”返回 0/false)。 我假设您得到了正确的 main() { ... } - 您的问题有误。您应该只剪切并粘贴真实代码,这样人们就不会转移注意力。

正如@Kaylum 指出的那样,我在 strcmp 中错过了同样的问题,它比较的是 2 个字符串,而不是一个字符和一个字符串。在这种情况下,您可以只说 isWest = (direction == 'W'); 而不是使用 strcmp

为了完整起见,您可以说 char *direction = &longitude[14]; 现在 direction 是一个以 0 结尾的字符串并且所以 printf 和 strcmp 工作。我认为这不是一个好的解决方案...

关于c - 在字符串中定位一个元素并在 C 中比较它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43531254/

相关文章:

c - != C语言中的符号查询

c - C 中 long double 的格式说明符 %Lf 未按预期工作

c - 如何在数字之间放置文本? (C)

c++ - int 的 Arduino C++ vector

java - 将 Object 数组转换为 String 数组会抛出 ClassCastException

c - 如何删除字符串中的元音

c - gcc 优化跳过初始化分配的内存

javascript - 使用 Polymer 访问嵌套在对象中的数组中对象的值

常量字符串数组

c - 从字符串的角度理解 C 中的指针