Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以字符串作为输入并将其存储在C语言中的字符数组中_C - Fatal编程技术网

以字符串作为输入并将其存储在C语言中的字符数组中

以字符串作为输入并将其存储在C语言中的字符数组中,c,C,我被难倒在如何在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=getch

我被难倒在如何在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]);
}
#包括
void main()
{
chara[10],c;
int i=0;
而((c=getchar())!='\n')
{
scanf(“%c”、&a[i++]);
c=getchar();
}

对于(i=0;i将字符串读入字符数组:

char *a = NULL;
int read;
size_t len;
read = getline(&a, &len, stdin);
//free memory
free(a);

要读取输入,我建议使用该函数。它是
scanf
的一个好的、安全的替代方法

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

char user_input[20];
然后,我们可以通过以下方式从命令行获取用户输入:

fgets(user_input, 20, stdin);
这将在中的字符串中最多存储20个字符,并确保它是正确的。我们将输入限制为前面声明的数组的大小,这一事实确保不存在缓冲区溢出的可能性

然后,让我们使用以下命令清除输入字符串的讨厌的换行符:

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

最后,让我们使用以下方法打印:

要使用
fgets
printf
您需要声明以下标题:

#include <stdio.h>
工作完成了

请注意,请允许我回答您添加到问题中的代码

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

  • 终止字符串时不能为null,这意味着如果要以仔细循环以外的任何其他方式读取,则会出现问题

  • 您从用户获取输入两次——一次使用
    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;
    }
    
    #包括
    int main()
    {
    chara[10];
    int i=0;
    while((a[i++]=getchar())!='\n'&&i<10)/*从用户处获取输入,直到它成为换行符或等于10为止*/
    ;
    a[i]='\0';/*null终止字符串*/
    i=0;
    while(a[i]!='\0')/*打印,直到达到\0为止*/
    printf(“%c”,a[i++]);
    返回0;
    }
    
    它现在应该可以工作了。

    您的代码是这样的(除了我添加了一些空格以提高可读性之外):

    请注意,原始或修订的代码null都不会终止字符串。对于给定的用法,这是可以的。对于一般用途,则不是

    修改后的代码中最后的
    for
    循环和以下
    putchar()
    可以(安全地)替换为:

    这是安全的,因为指定了长度,所以
    printf()
    不会超出初始化的数据。要创建以null结尾的字符串,输入代码需要为其留出足够的空间:

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

    (注意(a)-1的大小)

    char buffer[20];fgets(buffer,20,stdin);buffer[strlen(buffer)-1]='\0';
    -这声明了一个数组来存储输入,使用
    fgets
    获取输入,然后使用
    strlen
    删除换行符。你需要
    #include
    #include
    。@Nobilis请将其作为答案而不是注释发布。@Devlus我编辑了它并添加了我的代码。@JohnKugelman Done:)只是觉得它不值得一个完整的答案,但我对它进行了一点扩展,希望OP能彻底阅读其中的链接。我这样做有什么不对?我这样做有什么不对?@user2316393抱歉,我没有注意到你更新了你的答案。好吧,正如我指出的
    scanf
    是一个ay不依赖循环来减少代码、出错的可能性(即bug)和混乱:)关于指针请求,当将
    user\u input
    传递到
    fgets
    时,它将衰减为指针,因为数组在作为函数参数传递时总是衰减为指针。这同样适用于
    printf
    strlen
    。不确定这是否是您感兴趣的。是的,但在您看来,最大大小i如果我不知道要输入的字符串的大小,那么我必须使用循环,对吗@Nobilis@user2316393如果您根本不知道大小,那么我建议使用。请查看此链接,其中讨论了该方法。但首先请仔细阅读指针和动态内存管理。或者,您可以提示用户输入大小,然后创建这样大小的数组。C99允许这样的数组。顺便说一句,我已经编辑了我的帖子,指出了您的代码中的一些问题,并就如何修复代码提出了建议。好的,伙计!谢谢!)
    #include <string.h>
    
    #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;
    }
    
     1  #include <stdio.h>
     2  void main()
     3  {
     4      char a[10], c;
     5      int i = 0;
     6      while ((c = getchar()) != '\n')
     7      {
     8          scanf("%c", &a[i++]);
     9          c = getchar();
    10      }
    11      for (i = 0; i < 11; i++)
    12          printf("%c", a[i]);
    13   }
    
    #include <stdio.h>
    
    int main(void)
    {
        char a[10];
        int c;
        int i;
        int n;
        for (i = 0; i < sizeof(a) && ((c=getchar()) != EOF && c != '\n')
            a[i++] = c;
        n = i;
        for (i = 0; i < n; i++)
            printf("%c", a[i]);
        putchar('\n');
        return 0;
    }
    
    printf("%.*s\n", n, a);
    
        for (i = 0; i < sizeof(a)-1 && ((c=getchar()) != EOF && c != '\n')
            a[i++] = c;
        a[i] = '\0';