C 如何输入多个字符串,后跟换行符

C 如何输入多个字符串,后跟换行符,c,string,C,String,这个程序询问用户想要输入多少字符串,然后它获取并存储所有字符串。每个字符串后面都有一个换行符,表示正在输入新字符串 #include<stdio.h> int main() { int n,i; char str[20]; scanf("%d",&n); //how many string //input each string for(i=0;i<n;i++) { scanf("%s",&s

这个程序询问用户想要输入多少字符串,然后它获取并存储所有字符串。每个字符串后面都有一个换行符,表示正在输入新字符串

#include<stdio.h>

int main()
{
    int n,i;
    char str[20];

    scanf("%d",&n); //how many string

    //input each string
    for(i=0;i<n;i++)
    {
        scanf("%s",&str[i]);
    }

    //display each string
    for(i=0;i<n;i++)
    {
        printf("%s",str[i]);
    }

    return 0;
}
#包括
int main()
{
int n,i;
char-str[20];
scanf(“%d”,&n);//有多少个字符串
//输入每个字符串

for(i=0;iA
char str[20]
声明一个
20
字符数组,而不是
20
字符串

代码中的以下循环将写入从
str
开始的第一个字符串,然后写入从
str+1
开始的第二个字符串,这将覆盖您写入的第一个字符串的第二个和后续字符

//input each string
for(i=0;i<n;i++)
{
    scanf("%s",&str[i]);
}
这是一个固定版本的代码,它应该支持系统内存所能支持的字符串数

#include<stdio.h>
#include <string.h>
#include <stdlib.h>


#define MAX_STRING_SIZE 1024
int main()
{
    int n,i;
    char ** str;

    scanf("%d",&n); //how many string

    // Allocate enough memory to store the number of strings requested
    str = malloc(n * sizeof(char*));
    for (i = 0; i < n; i++) {
        str[i] = malloc((MAX_STRING_SIZE + 1) * sizeof(char));
        memset(str[i], 0, MAX_STRING_SIZE + 1);
    }

    //input each string
    for(i=0;i<n;i++)
    {
        scanf("%s", str[i]);
    }

    // display each string
    for (i=0;i<n;i++)
    {
        printf("%s\n",str[i]);
    }

    // Free the memory we allocated
    for (i = 0; i < n; i++) 
        free(str[i]);
    free(str);

    return 0;
}
#包括
#包括
#包括
#定义最大字符串大小1024
int main()
{
int n,i;
字符**str;
scanf(“%d”,&n);//有多少个字符串
//分配足够的内存来存储请求的字符串数
str=malloc(n*sizeof(char*));
对于(i=0;ifor(i=0;i在你的代码中
str
是一个20个字符的数组。但是你需要一个20个字符串的数组,比如说100个字符

如果你写:

char str[20][100];
你的计划会成功的


您现在最多可以输入20个字符串,每个字符串的长度最多为100个字符,包括以零结尾的字符串。

您需要的是一个2D字符数组,实际上是一个字符串数组:

#include<stdio.h>
int main()
{
int n,i;
char str[20][20]; // Can store 20 strings, each of length 20

scanf("%d",&n); //how many string

//input each string
for(i=0;i<n;i++)
{
   scanf("%s",str[i]);
}

//display each string
for(i=0;i<n;i++)
{
   printf("%s",str[i]);
   printf("\n");
}

return 0;
}
#包括
int main()
{
int n,i;
char str[20][20];//可以存储20个字符串,每个字符串的长度为20
scanf(“%d”,&n);//有多少个字符串
//输入每个字符串

对于(i=0;i而言,更好的方法是动态分配内存

#include <stdio.h>

int main()
{
   int n,i;
   char** str;

   scanf("%d", &n);
   str = (char**)malloc(sizeof(char*)*n);

   for(i=0; i<n; i++)
   {
      str[i] = (char*)malloc(100); // assuming the strings will not be more than 100 chars long.
      scanf("%s", &str[i]);
   }

   for(i=0; i<n; i++)
      free(str[i]);
   free(str);
}
#包括
int main()
{
int n,i;
字符**str;
scanf(“%d”和“&n”);
str=(char**)malloc(sizeof(char*)*n);

对于(i=0;i我认为您不理解C中字符串的概念。 在C(和C++)中,字符串只是以NULL(ASCII值-0)结尾的字符数组。 当您声明
char str[20];
时,您只声明了一个位置为19个字符的字符串(因为NULL占字符串的1个字符)。如果您想声明字符串数组,您应该执行如下操作
char strs[20][100];
这将是一个2D字符数组,在我们的例子中是一个1D字符串数组。它可能包含20个大小为99个字符+NULL的字符串或100个大小为19个字符+NULL的字符串,这取决于您希望它的方式(通常您会将其视为20个大小为99个字符+NULL的字符串)。 行
scanf(“%s”,str[i]);
实际上是从您在字符串中提到的位置开始获取输入,并以null结束

char str[20];
scanf("%s", str);
(注意-如果是第一个点-不需要&operator)输入“banana”将以点[6]中带有NULL的字符串结尾(因为字符串和数组从0变为声明的大小-1)。 但是:

例如-输入将从第5个点([4])开始,结束取决于输入。如果使用此scanf,则str[0]到str[3]中可能会有垃圾值,因为您没有在其中执行任何操作。 不要让名称混淆-char str[20]-只是一个大小为19个字符+NULL的字符串。 正确的方法是:

char str[20][20]; //20 strings with the size of 19 character + NULL
int i, n;
printf("Enter the number of strings you want to enter: ");
scanf("%d", &n);
for(i = 0 ; i < n ; i++)
{
scanf("%s", &str[i]);
}
char str[20][20];//20个字符串,大小为19个字符+NULL
inti,n;
printf(“输入要输入的字符串数:”);
scanf(“%d”和“&n”);
对于(i=0;i
就这样。
我希望我能帮上忙:)

您的代码工作正常,但我对我的代码printf(“%s”,str[I])有一个疑问,它使程序崩溃,但在您的代码中它工作正常。为什么?那是因为您用一个&str[I]读入字符串。请删除&str[I],并用str[I]替换它,它应该可以正常工作。明白了,很抱歉我在scanf中添加了&导致printf语句错误..疑问解决了,谢谢大家。顺便说一句,我了解到,要显示2d数组,我们需要2个for循环(嵌套)但在这里,无论是在printf还是scanf中,单循环都可以很好地工作。请如何解释?因为,当你使用两个循环时,你一个字符一个字符地读取它。在这里,我们一次处理整个字符串。所以,读入和写入一组字符串,单循环就足够了。如果你想一个字符一个字符地读取它acter,你可以使用:for(i=0;我想你澄清了我的疑问,也澄清了字符串的概念。我一直很难学习这个。谢谢你!没问题,很乐意帮助:)问题解决了!多亏了这一切,从stackoverflow学习总是一件愉快的事情。现在我的第二步是按照字典顺序对每个字符串排序,并相应地显示出来!希望我能做到
scanf("%s", &str[4]);
char str[20][20]; //20 strings with the size of 19 character + NULL
int i, n;
printf("Enter the number of strings you want to enter: ");
scanf("%d", &n);
for(i = 0 ; i < n ; i++)
{
scanf("%s", &str[i]);
}