gpt4 book ai didi

c - 如何为没有空字符的字符串计算 strlen?

转载 作者:行者123 更新时间:2023-12-03 22:58:08 27 4
gpt4 key购买 nike

此代码返回 n=11,第 10 个和第 11 个字符为 ' ' 和 '@'
这是如何运作的? strlen函数怎么把它当成11个字符?在某些编译器中,它似乎将字符串长度设为 12 个字符。

#include <stdio.h>
#include <string.h>

void fun(char *arr)
{
int i;
unsigned int n = strlen(arr);
printf("n = %d\n", n);
for (i=0; i<n; i++)
printf("%c ", arr[i]);
}

int main()
{
char arr[] = {'g', 'e', 'e', 'k', 's', 'q', 'u', 'i', 'z'};
fun(arr);
return 0;
}

最佳答案

根据标准,由于您的“字符串”没有空终止符,因此这不是字符串。调用 strlen除了字符串之外的任何东西都是未定义的行为,因此任何事情都可能发生,包括您正在观察的情况。

如果你想知道这到底是怎么发生的,这很可能是因为 strlen一直试图找到空终止符,偶尔会在 arr 之后的某个地方找到它。 .

请注意,如果找不到“足够快”的空终止符,此代码甚至可能出现段错误。

您可以使用类似 valgrind 的工具检测此类内存访问违规。

关于c - 如何为没有空字符的字符串计算 strlen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38499311/

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