gpt4 book ai didi

c - 将字符串作为输入并将它们存储在 C 中的字符数组中

转载 作者:行者123 更新时间:2023-11-30 18:17:10 25 4
gpt4 key购买 nike

我对如何在 C 中的数组中存储字符串感到困惑,每个字符单独保存。例如,如果用户输入 hellop ,我想将它存储在给定的数组中,比如 userText ,与 userText[0] = h , userText[1] = e , userText[2] = l , 等等。我知道这很简单,但我还是个新手。因此,如果有人可以提供帮助,那就太好了。请解释如何使用指针来执行此操作。

#include<stdio.h>
void main()
{
char a[10],c;
int i=0;
while((c=getchar())!='\n')
{
scanf("%c",&a[i++]);
c=getchar();
}
for(i=0;i<11;i++)
printf("%c",a[i]);
}

当我输入 eoeoeoeo\363 时,程序输出一些垃圾值 ( hellop )

最佳答案

要读取输入,我建议使用 fgets功能。这是 scanf 的一个很好、安全的替代方案。

首先让我们声明一个缓冲区,如下所示:

char user_input[20];

然后我们可以通过以下方式从命令行获取用户输入:

fgets(user_input, 20, stdin);

这会将最多 20 个字符存储到 standard input 中的字符串中。它将确保它是 null-terminated 。我们将输入限制为之前声明的数组的大小这一事实确保了不可能出现缓冲区溢出。

然后让我们清除使用strlen输入到字符串中的讨厌的换行符。 :

user_input[strlen(user_input) -1] = '\0';

由于 strlen 将字符串 up 的大小返回到空终止符,但没有它,我们可以确定该位置存在换行符(\n)。我们用空终止符(\0)替换它,以便字符串在那里结束。

最后,让我们使用 printf 来打印它:

printf("The user has entered '%s'\n", user_input);

要使用 fgetsprintf,您需要声明以下 header :

#include <stdio.h>

对于strlen,我们需要另一个 header ,即:

#include <string.h>

工作完成。

附注我可以解决您添加到问题中的代码吗?

  1. main 通常声明为 int main 而不是 void main,后者还要求 main返回某种值。对于小型应用程序,通常将 return 0; 放在右大括号之前。此返回用于向操作系统指示程序是否成功执行(0 表示一切正常,非零表示存在问题)。

  2. 您的字符串不是空终止的,这意味着如果您以除仔细循环之外的任何其他方式读取,您将会遇到问题。

  3. 您从用户那里获取输入两次 - 一次使用 getchar,然后使用 scanf

如果您坚持使用您的代码,我对其进行了一些修改:

#include<stdio.h>
int main()
{
char a[10];
int i=0;
while( (a[i++]=getchar()) != '\n' && i < 10) /* take input from user until it's a newline or equal to 10 */
;
a[i] = '\0'; /* null-terminate the string */
i = 0;
while(a[i] != '\0') /* print until we've hit \0 */
printf("%c",a[i++]);

return 0;
}

现在应该可以工作了。

关于c - 将字符串作为输入并将它们存储在 C 中的字符数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17504122/

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