问题描述
问题是在字符串数组中找到最长的公共前缀,即。 【花、流、飞】 当我使用 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 (将#修改为@)