gpt4 book ai didi

连接 char 数组和 char

转载 作者:行者123 更新时间:2023-11-30 14:58:07 24 4
gpt4 key购买 nike

我是 C 语言新手。我需要连接 char 数组和一个 char。在java中我们可以使用“+”操作,但在C中这是不允许的。 Strcat 和 strcpy 也不适合我。我怎样才能实现这个目标?我的代码如下

void myFunc(char prefix[], struct Tree *root) {
char tempPrefix[30];
strcpy(tempPrefix, prefix);
char label = root->label;
//I want to concat tempPrefix and label

我的问题与 concatenate char array in C 不同因为它将 char 数组与另一个连接起来,但我的是一个 char 数组和一个 char

最佳答案

确实很简单。主要关心的是 tempPrefix 应该有足够的空间容纳前缀+原始字符。由于 C 字符串必须以 null 结尾,因此您的函数不应复制超过 28 个字符的前缀。它是 30(缓冲区的大小)- 1(根标签字符)-1(终止空字符)。幸运的是,标准库有 strncpy :

size_t const buffer_size = sizeof tempPrefix; // Only because tempPrefix is declared an array of characters in scope. 
strncpy(tempPrefix, prefix, buffer_size - 3);
tempPrefix[buffer_size - 2] = root->label;
tempPrefix[buffer_size - 1] = '\0';

不要在函数调用中对缓冲区大小进行硬编码也是值得的,这样您就可以通过最小的更改来增加其大小。

<小时/>

如果您的缓冲器不完全适合,则需要更多的跑腿工作。该方法与以前几乎相同,但调用 strchr需要完成图片。

size_t const buffer_size = sizeof tempPrefix; // Only because tempPrefix is declared an array of characters in scope. 
strncpy(tempPrefix, prefix, buffer_size - 3);
tempPrefix[buffer_size - 2] = tempPrefix[buffer_size - 1] = '\0';
*strchr(tempPrefix, '\0') = root->label;

我们再次复制不超过 28 个字符。但显式地用 NUL 字节填充末尾。现在,由于 strncpy 使用 NUL 字节填充缓冲区,最多为 count,以防复制的字符串较短,因此实际上复制的前缀之后的所有内容现在都是 \0 。这就是为什么我立即尊重 strchr 的结果,它保证指向一个有效的字符。准确地说是第一个可用空间。

关于连接 char 数组和 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43463761/

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