【发布时间】:2020-12-11 03:57:19
【问题描述】:
我正在编写一个 C 程序,它将连接所有行(包括“\n”),同时将指针保存到最终字符串的最后一个字符。但是,我没有得到我预期的结果。可能是什么问题?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Node {
struct Node *next;
struct Node *prev;
};
struct Node *CreateNewNode() {
struct Node *newNode = malloc(sizeof(struct Node));
return newNode;
}
struct PieceTable {
char *buffer;
char *ptr_to_last_character;
} PT;
void strconcatenate(char *source) {
size_t source_len = strlen(source);
size_t buffer_len = strlen(PT.buffer);
PT.buffer = realloc(PT.buffer, buffer_len + source_len + 1);
while (*source)
*PT.ptr_to_last_character++ = *source++;
*PT.ptr_to_last_character = '\0';
}
int main(int argc, char *argv[]) {
char input_line[1024];
PT.buffer = malloc(sizeof(char) * 2);
*PT.buffer = '\0';
PT.ptr_to_last_character = PT.buffer;
struct Node *new_node = CreateNewNode();
new_node->next = NULL;
new_node->prev = NULL;
strconcatenate("Lorem ipsum\n");
strconcatenate("dolor sit amet\n");
strconcatenate("consectetur adipiscing elit\n");
printf("%s", PT.buffer);
return 0;
}
预期输出:
Lorem ipsum
dolor sit amet
consectetur adipiscing elit
输出:
etur adipiscing elit
【问题讨论】:
-
“我没有得到预期的结果。” - 你期待什么?请编辑问题以明确说明。
-
@marko - 看看帖子底部
-
@Jonathan S. 这是什么代码 struct Node *new_node = CreateNewNode();新节点->下一个 = NULL; new_node->prev = NULL;在节目中做什么?
-
realloc 使指针无效,因为它分配新的存储空间并将内容移到那里。
-
@JonathanS。保持指向终止零的指针没有任何意义,因为在任何情况下您都需要调用 strlen。所以整个功能没有意义。
标签: c pointers string-concatenation c-strings function-definition