gpt4 book ai didi

c - printf 中 %s 之后的任何字符都打印在该行的开头

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:30 25 4
gpt4 key购买 nike

我正在读取一个文件,知道该行将是 100 个字符或更少。

char *nodeDetails = malloc(sizeof(char[100])); // Object name or question
char temp[10]; // Question or Object text used to identify line
sscanf(text, "%[Question|Object]: %[^\n]", temp, nodeDetails);

我正确地读取了该行,然后在程序中尝试打印它。

printf("Is it %s?\n", currentNode->objectName);

输出变为:

?t is an alligator

而它应该是:

Is it an alligator?

如果我不从文件中读取该行,而只是使用动态分配的字符串手动设置 objectName。它工作正常。例如。

currentNode->objectName = "an alligator";

我厌倦了重新分配内存以纠正

sizeof(char[strlen(currentNode->objectName)]);

它仍然做同样的事情。所以我迷路了。

知道如何解决吗?

最佳答案

代码有多个问题。

// sscanf(text, "%[Question|Object]: %[^\n]", temp, nodeDetails);
// Check result, drop |, add widths
if (2 != sscanf(text, "%9[QuestionObject]: %99[^\n]", temp, nodeDetails))
HandleUnexpectedInput();

// This prints wrong because `currentNode->objectName` still has an `\n` in the end of it.
printf("Is it %s?\n", currentNode->objectName);

// As mentioned by x4rf41, add 1.
sizeof(char[strlen(currentNode->objectName) + 1]);

关于c - printf 中 %s 之后的任何字符都打印在该行的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20336212/

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