字符串搜索程序中的段错误

问题描述 投票:1回答:1

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;
}
c arrays string search
1个回答
0
投票
  1. [gets功能很危险,请避免使用它。
  2. 您需要了解字符串如何存储在内存中。
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 }

© www.soinside.com 2019 - 2024. All rights reserved.