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

时间:2013-12-02 19:26:22

标签: c string printf

我正在读取文件,知道该行将不超过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)]);

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

知道怎么解决吗?

1 个答案:

答案 0 :(得分:0)

代码有多个问题。

// 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]);