gpt4 book ai didi

c - 这个 strcmp() 有什么问题吗?

转载 作者:行者123 更新时间:2023-11-30 20:51:15 25 4
gpt4 key购买 nike

我尝试使用 strcmp() 编写简单的 C 函数。但我总是遇到段错误(核心转储)。出了什么问题?

char *arr={"abcdefg"};
char *a = arr[1];

if(strcmp(a, 'b') == 0)
{
printf("it is b \n");
}

最佳答案

What is wrong?

你没有让编译器帮助你自己。

在 GCC 上使用 -Wall -Wextra (这绝不是你能得到的最好的,而是你应该始终使用的最低限度),我得到:

testme.c: In function ‘main’:
testme.c:6:11: warning: initialization makes pointer from integer without a cast [enabled by default]
char *a = arr[1];
^

您获取了 arr[1](即 char'b'),并将其转换为char *。您的 a 现在指向地址 0x62 (假设是 ASCII),这绝对不是您想要的。您可能需要 &arr[1]arr + 1

或者您想要一个char——那么您不应该声明char *strcmp() 首先使用起来就是错误的。

testme.c:8:1: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast [enabled by default]
if(strcmp(a, 'b') == 0)
^
In file included from testme.c:1:0:
/usr/include/string.h:144:12: note: expected ‘const char *’ but argument is of type ‘int’
extern int strcmp (const char *__s1, const char *__s2)
^

strcmp() 需要两个 C 字符串 (char const *)。您的第二个参数 'b' 的类型为 int...您可能需要 "b"

这仍然不能比较相等,因为“bcdefg”不等于“b”...

或者您想要进行单字符比较...这将是 if ( a == 'b' ) then, with a 属于 char 类型,而不是 char *(见上文)。

testme.c:10:5: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
printf("it is b \n");
^
testme.c:10:5: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]

请帮我们发布完整代码,包括int main()和所有内容,这样我们就可以复制、粘贴和编译,并且仍然有行数字匹配。

关于c - 这个 strcmp() 有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33606556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com