【发布时间】:2020-05-01 15:51:12
【问题描述】:
我对 C 很陌生,我一直在尝试一些东西,但它似乎并没有真正奏效:
我有一个数组char *initialParts;,我根据用户的输入分配空间,但我认为这并不重要。
我还有一个计数器initialPartsCounter = 0; 用作索引,以便在分配的内存的每个索引处存储一个字母。
到目前为止,我得到了这个:
char *initialParts;
const char comma[3] = ",";
int initialPartsCounter = 0;
initialParts = (char*)malloc((int)numInitialParts * sizeof(char));
char *token;
token = strtok(fileLine, comma);
while (token != NULL) {
strcpy(&initialParts[initialPartsCounter], token);
initialPartsCounter++;
token = strtok(NULL, comma);
}
for (int l = 0 ; l < (int)numInitialParts; l++)
{
printf("%c", initialParts[l]);
}
其中 numInitialParts 是用户输入的数字,fileLine 是文件中读取的行。
在以下示例中,numInitialParts = 4、and fileLine = 'q,d,c,k'
在我的 for 循环中,打印的输出很奇怪:qdck☐☐☐☐(我无法复制 k 之后的字符,因为我粘贴它时它没有做任何事情,但它类似,请查看图片以查看它的外观)。
编辑:我理想的输出是:
qdck
如果有人有解决此问题的想法,我会很高兴听到它。谢谢!
【问题讨论】:
-
"打印的输出很奇怪" 你希望得到哪个输出?
-
initialParts是char*吗?请发布一个完整的示例。另外:filename是如何定义的? -
您读取了
initialPartsCounter标记,但打印了numInitialParts字符。 -
"将它们的值存储到一个数组中" 字符串还是字符?看起来您正在尝试从输入字符串中删除分隔符。请在您的帖子中添加两件事:(a)示例字符串和(b)您希望输出的样子。这就是为什么最好先编写测试。
-
如果 fileLine 是
x,k,c,d,,xk,xkc,xkcd,你希望控制台显示什么。这样的例子会暴露更多的边缘。