gpt4 book ai didi

c - 如何使用函数将字符附加到 C 中的字符串

转载 作者:行者123 更新时间:2023-12-02 18:29:47 25 4
gpt4 key购买 nike

我正在编写一个词法分析器,其中需要将一个字符附加到一个字符串(一个字符*)。由于某种原因,当我将下面的代码打印到标准输出时,它会导致字符串的值为“(null)”。该函数如下所示。

void append_char(char *buffer, char c) {
if(buffer == NULL) {
buffer = malloc(sizeof(char));
if(buffer == NULL) {
fprintf(stderr, "COuld not allcocate memory to buffer\n");
}
} else {
buffer = realloc(buffer, sizeof(buffer) + sizeof(char));
}
buffer[sizeof(buffer) - 1] = c;
}

当我运行线路时

 char *buf = NULL;
append_char(buf, 'a');
append_char(buf, '\0');
printf("buffer: %s\n", buf);

它将(null)打印到标准输出。我该如何解决这个问题?

最佳答案

按值传递

append_char(char *buffer, char c) 不会影响 main() 中调用者的 buf: append_char(buf ,'a');buf 仍为 NULL。这导致OP的输出。

尺寸不足

新分配的字符串大小不足。没有空间容纳空字符

尺寸错误

对于char *buffersizeof(buffer)是指针的大小,而不是预先分配的数量。

失去内存

buffer = realloc(buffer, sizeof(buffer) + sizeof(char)); 失败时(realloc() 返回 NULL) ,buffer的原始值丢失了。保存结果并测试。

注意:可以调用realloc(NULL, ...)


char *append_char(char *buffer, char c) {
size_t old_length = buffer ? strlen(buffer) : 0;
size_t new_length = old_length + 1; // +1 for c
// Size needed for a string is its length + 1
char *new_buffer = realloc(buffer, new_length + 1); // +1 for \0
if (new_buffer == NULL) {
fprintf(stderr, "Could not allocate memory to buffer\n");
free(buffer);
return NULL;
}
new_buffer[old_length] = c;
new_buffer[old_length + 1] = '\0';
return new_buffer;
}

// Usage
buf = append_char(buf, 'a');

关于c - 如何使用函数将字符附加到 C 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69572328/

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