gpt4 book ai didi

c - 关于 C 字符串的问题

转载 作者:太空狗 更新时间:2023-10-29 17:15:45 25 4
gpt4 key购买 nike

我是 C 的新手,我对 C 的字符串非常困惑。以下是我的问题。

从字符串中查找最后一个字符

如何找出字符串中的最后一个字符?我带来了类似的东西,

char *str = "hello";
printf("%c", str[strlen(str) - 1]);
return 0;

这是要走的路吗?我以某种方式认为,这不是正确的方法,因为 strlen 必须遍历字符以获得长度。所以这个操作将有一个 O(n) 的复杂度。

char 转换为 char*

我有一个字符串,需要向其附加一个字符。我怎样才能做到这一点? strcat 只接受 char*。我尝试了以下,

char delimiter = ',';
char text[6];
strcpy(text, "hello");
strcat(text, delimiter);

strcat 与具有局部作用域的变量一起使用

请考虑以下代码,

void foo(char *output)
{
char *delimiter = ',';
strcpy(output, "hello");
strcat(output, delimiter);
}

上面代码中,delimiter是一个局部变量,在foo返回后被销毁。可以将它附加到变量 output 吗?

strcat 如何处理空终止符?

如果我连接两个空终止字符串,strcat 是否会在结果字符串中附加两个空终止字符?

是否有一篇很好的初学者文章来解释字符串在 C 中的工作原理以及我如何执行通常的字符串操作?

任何帮助都会很棒!

最佳答案

  1. 最后一个字:你的做法是正确的。如果您需要对大字符串执行大量操作,则包含字符串的数据结构应该与它们一起存储长度。如果不是,O(n) 也没关系。

  2. 添加一个字符:您有几个错误。一方面,您的缓冲区太小,无法容纳另一个字符。至于strcat的调用方式,可以把字符放在一个字符串中(一个有2个元素的数组,第二个为0),也可以手动使用长度把字符写到最后。

  3. 您对 2 个 nul 终止符的担心是没有根据的。虽然它占用与字符串相邻的内存并且是必要的,但末尾的 nul 字节在长度等意义上不是“字符串的一部分”。它纯粹是结束的标记。 strcat 将覆盖旧的 nul 并在连接字符串之后的最后放置一个新的。同样,在调用 strcat 之前,您需要确保缓冲区足够大!

关于c - 关于 C 字符串的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3148071/

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