Q。 输入并存储n个字符串,然后搜索特定的字符串。
我能够输入“字符串数”,然后也能输入字符串。但是,然后字符串不被打印。比较和搜索均未发生,并且显示分段错误。当我使用gets()作为字符串输入时,会发生这种情况。但是,当我使用scanf()进行字符串输入时,该程序将在我输入“字符串数”后立即终止。为什么这样?
这里是代码:
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
char str[200],names[100];
int n,i;
int flag=0;
printf("Give number of strings:\n");
scanf("%d",&n);
printf("Enter the strings:\n");
for(i=0;i<n;i++)
{
gets(names);
}
printf("Entered Values are:\n");
for(i=0;i<n;i++)
{
printf("%s\t",names[i]);
}
printf("Enter the string you want to search for:\n");
scanf("%s",str);
for(i=0;i<n;i++)
{
if(strcmp(names[i],str) == 0)
{
flag=1;
break;
}
}
if(flag==1)
printf("Yes this string %s exists!\n",str);
else
printf("No it does not exists");
return 0;
}
gets
功能很危险,请避免使用它。gets
在您的代码段中,而不是分配不同的数组来存储输入字符串,而是一次又一次地覆盖同一数组。
为了存储char c[] = "Hello";` //is same as
char c[5];
c[0] = 'H';
c[1] = 'e';
c[2] = 'l';
c[3] = 'l';
c[4] = '0';
c[5] = '/0';
字符串,您需要分配n
字符数组。 n
可用于分配2D数组,例如VLA大小的char names[n][100]
。 nX100
代表2D矩阵中的行,每行可以存储一个长度为100字节的字符串。
按照以下代码段更新您的代码,
names[0...n]
您可以找到完整的代码char names[n][100];
printf("Enter the strings:\n");
for(i=0;i<n;i++)
{
scanf("%99s",names[i]); //Avoid buffer overflow and mention max capacity
}