【问题标题】:longest string array segmentation fault最长字符串数组分段错误
【发布时间】:2022-06-19 22:03:06
【问题描述】:

编写一个 C 函数longestStrInAr(),它接受一个字符串数组 str 和 size (>0) 作为 参数,并通过 指针参数长度。如果两个或多个字符串具有相同的最长字符串长度,则 第一次出现的字符串将被返回给调用函数。例如,如果 size 为 5 并且 字符串数组是 {"peter","john","mary","jane","kenny"},那么最长的字符串是 "peter" 和 字符串长度为 5 将返回给调用函数

我在这里遇到分段错误,我不知道为什么

#include <stdio.h>
#include <string.h>
#define N 20
char *longestStrInAr(char str[N][40], int size, int *length);
int main()
{
   int i, size, length;   
   char str[N][40], first[40], last[40], *p, *result;
   char dummychar;   
    
   printf("Enter array size: \n");
   scanf("%d", &size);
   scanf("%c", &dummychar);
   for (i=0; i<size; i++) {
      printf("Enter string %d: \n", i+1);
      fgets(str[i], 40, stdin);
      if (p=strchr(str[i],'\n')) *p = '\0';   
   }  
   result = longestStrInAr(str, size, &length);
   printf("longest: %s \nlength: %d\n", result, length);         
   return 0;
}
char *longestStrInAr(char str[N][40], int size, int *length)
{
    char *p;
   for (int i = 0; i < size; i++)
   {
       
       int j = 0; int max = 0, *length = 0;
       while (str[i][j++] != '\0')    
       {
           max++;
       }
        if(max > *length) {
            *length = max;
            p = str[i];
        }
       
   }
   return p;
}

【问题讨论】:

  • 当你在调试器下运行时,哪一行出错了'

标签: c


【解决方案1】:

线

int j = 0; int max = 0, *length = 0;

不好。在这里声明了一个新的指针变量length,并将其初始化为NULL,隐藏了参数length
之后,这个lengthNULL)被取消引用,会导致Segmentation Fault。

要将参数length 指向的内容初始化为零,该行应为:

int j = 0, max = 0; *length = 0;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2015-02-16
    • 2019-01-28
    • 2012-11-14
    • 1970-01-01
    相关资源
    最近更新 更多