gpt4 book ai didi

C 字符数组打印为字符串错误并接受空终止?

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:43 24 4
gpt4 key购买 nike

我写了一个简单的方法,从一个长字符串中获取输入并打印它。我将我的数据保存在一个 char 数组中,并尝试将所述数组的最后一个元素设置为 '\0' 以进行空终止,以便我可以 printf(%s,array)。

#include <stdio.h>
#define MAX 9
#define DEBUG 1
int QUIT = 0;
int assignNewBoard(void);

void main (int argc, char *argv[]) {
assignNewBoard();

}

int assignNewBoard(void) {
int row,col , count=0,maxCount=(MAX*MAX);
char ch;
char input[maxCount+MAX]; //our buffer with room for overflow.
//Hopefully never more than 90chars.

while((ch = fgetc(stdin)) != '\n') {
//input checks
if(feof(stdin)){
if(DEBUG) printf("Finished!\n");
QUIT = 1;
}

count++;
input[count] = ch;
}

if(DEBUG)printf("::");

input[count+1] = '\0'; //null termination for printing.
printf("%s\n",input);//This doesn't seem to happen at all in output!

if(DEBUG) printf("We got %d count!\n", count);

return 0;
}

但是上面的代码并没有把我的字符数组打印成字符串!只是在控制台中的::之后打印为空!那我在这里做错了什么?我曾在我的代码中让它像这样工作,但现在不是,甚至在简化文件中也不是!

运行时应该有一行“::(input)”,但该行只是“::”。

我正在使用 GCC 进行编译。

最佳答案

在对它进行任何操作之前,您会增加 count,因此您读取的第一个字符会进入 input[1]。在 C 中,数组索引从 0 开始;数组中第一个字符 input[0] 的值是垃圾,因此您获得的输出可能会不时变化。 (行为未定义)。

您还应该特别检查 count 永远不会大到用完缓冲区的末尾。如果确实发生这种情况,则可能会导致您的程序在其他地方崩溃,并且这些错误可能难以调试。

关于C 字符数组打印为字符串错误并接受空终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22214369/

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