gpt4 book ai didi

c - C 中的字符串函数如何链接?

转载 作者:行者123 更新时间:2023-12-04 10:27:58 24 4
gpt4 key购买 nike

我尝试使用 sting.h 头文件(不包括它)strlen()strtok() 中的两个不同函数。 strlen 成功执行,没有任何错误(但有一些警告),strtok 在运行时失败。如果我不包含头文件,为什么 strlen() 函数可以工作而不是 strtok() ?我想链接过程中有些东西我不明白。请澄清这种行为。但是,如果我将 a 打印为 '%c' 而不是 '%s' (strtok 返回一个垃圾值),程序将成功终止。

代码:

int main()
{
char string[] = "This is a String";
printf("\nLength of sting is %d\n",strlen(string));
}

警告:hello.c:在函数“main”中:hello.c:4:2:警告:内置函数“printf”的隐式声明不兼容 [默认启用]hello.c:4:37:警告:内置函数‘strlen’的隐式声明不兼容 [默认启用]hello.c:4:2:警告:格式“%d”需要“int”类型的参数,但参数 2 的类型为“long unsigned int”[-Wformat]

输出:$ ./a.out

Length of sting is 16

代码:

int main()
{
char string[] = "This is a String";
printf("\nLength of sting is %d\n",strlen(string));
char *a = strtok(string," ");
printf("%s",a);
}

警告:$ gcc 你好.chello.c:在函数“main”中:hello.c:4:2:警告:内置函数“printf”的隐式声明不兼容 [默认启用]hello.c:4:37:警告:内置函数‘strlen’的隐式声明不兼容 [默认启用]hello.c:4:2:警告:格式“%d”需要“int”类型的参数,但参数 2 的类型为“long unsigned int”[-Wformat]hello.c:5:12: 警告:初始化使指针从整数而不进行强制转换[默认启用]

输出:$ ./a.out

Length of sting is 16
Segmentation fault (core dumped)

最佳答案

对于大多数 C 标准库,链接是隐式完成的。您只需要包含您使用的标题(即警告)。

如果您不这样做,您的编译器(将您的代码编译为 ANSI C)假定函数返回 int,而不是它们记录在案的返回类型。因此,您的程序具有未定义的行为。 始终注意警告!
您必须包含 header string.hstdio.h

第一个程序可以运行,因为您很幸运, strlen 应该返回一个整数(准确地说是一个 size_t,但它会在您的系统上显示该值整数的表示和 size_t 让程序滑过)。

第二个失败,因为 strtok 返回一个 char* 但由于缺少包含指令,它被假定为 intintchar* 不是兼容的类型,所以你得到的“指针”是无效的。

关于c - C 中的字符串函数如何链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43109047/

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