gpt4 book ai didi

c - 尝试通过数组打印用户输入时出现意外输出

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

此代码将用户输入接收到一个数组中,然后将其打印出来。每次我打印用户输入时,最后都会打印一个随机的额外字符。

#include <stdio.h>
#include <ctype.h>

int main(void)
{
char arr[100];
char c;
printf("Enter a Sentence:");
int i =0;
for (i = 0;(c = getchar()) != '\n';++i)
arr[i] = c;
arr[++i] = '\n';
for (int i = 0;arr[i] != '\n';++i)
putchar(arr[i]);
}

例如我期望输出

Enter a sentence:abc

成为 abc 但我得到了 abcu

最佳答案

改变这个

arr[++i] = '\n'; /* this skips the current a[i] & put \n into next position which is incorrect */

arr[i] = '\n';

因为变量 i 已经在 for 循环的条件部分增加了

for (i = 0;(c = getchar()) != '\n';++i /* before loop terminating i incremented here */) {
arr[i] = c;
}

在声明自身的同时初始化缓冲区以避免获得一些垃圾值也很好。例如

char arr[100] = {}; /* zerod whole array */

还要确保 (c = getchar()) != '\n' 不会发生 >100 次,否则会发生缓冲区溢出,这会导致 未定义的行为。一种可能的方法是

for (i = 0; i < sizeof(arr)-1 && (c = getchar()) != '\n';++i) {
arr[i] = c;
}

关于c - 尝试通过数组打印用户输入时出现意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57343213/

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