*C* 我一直在 Leetcode

问题描述

问题是在字符串数组中找到最长的公共前缀,即。 【花、流、飞】 当我使用 gcc 在终端中运行它时,我编写的代码有效,但是当我在 Leetcode 中尝试时出现错误?我尝试查找它,但在我尝试访问不存在的内存的地方不断得到答案,但我不知道我在代码中的位置。谁能解释得好一点?这是代码

char* longestCommonPrefix(char** strs,int stRSSize) {
  char* answer;
  answer = malloc(sizeof(char) * strlen(strs[0]) + 1);
  strcpy(answer,strs[0]);
  for (int i = 0; i < stRSSize - 1; i++) {
    for (int k = 0; k < strlen(strs[i]) && k < strlen(strs[i + 1]); k++) {
      if (strs[i][k] != strs[i + 1][k]) {
        answer[k] = '\0';
        break;
      }
    }
  }
  printf("%s\n",answer);
  return answer;
}

即使我尝试这样做,它仍然是堆缓冲区溢出错误

char* longestCommonPrefix(char** strs,int stRSSize) {
  char* answer = malloc(sizeof(char) * 1000));
  
  return answer;
}

编辑: 我刚刚在 Leetcode 上找到了一个有人发布的解决方案,它创建了一个带有 malloc 的数组,没有错误。 >

char * longestCommonPrefix(char ** strs,int stRSSize){
    char* output = (char*)malloc(sizeof(char));
    strcpy(output,"");
    if (stRSSize == 0) {
        return output;
    }
    int longest = strlen(strs[0]);
    for (int i = 1; i < stRSSize; i++) {
        if (strlen(strs[i]) < longest) {
            longest = strlen(strs[i]);
        }
        for (int j = 0; j < longest; j++) {
            if (strs[i][j] != strs[0][j]) {
                if (j == 0) {
                    return output;
                } else if (j < longest) {
                    longest = j;
                }
                break;
            }
        }
    }
    free(output);
    output = (char*)malloc((longest + 1) * sizeof(char));
    strncpy(output,strs[0],longest);    
    output[longest] = '\0';
    return output;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)