当我尝试访问字符串的特定元素时,我遇到了我认为是段错误的问题。具体来说,我试图确定“经度”末尾的字母并检查它是否为“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部分是否正确,因为程序在到达之前崩溃了。我做错了什么?
答案 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
{
//...
}