我正在读取文件,知道该行将不超过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)]);
它仍然做同样的事情。所以我迷路了。
知道怎么解决吗?
答案 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]);