如何解决*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 举报,一经查实,本站将立刻删除。