longestCommonPrefix从函数返回,但未在C中打印到控制台
在下面的代码中,函数返回一个char指针p,并存储在out变量中,out变量也是一个指针。当我尝试使用printf语句打印时,它不会向控制台输出任何东西,任何指针longestCommonPrefix从函数返回,但未在C中打印到控制台,c,pointers,function-pointers,C,Pointers,Function Pointers,在下面的代码中,函数返回一个char指针p,并存储在out变量中,out变量也是一个指针。当我尝试使用printf语句打印时,它不会向控制台输出任何东西,任何指针 #include <stdio.h> #include <string.h> char * longestCommonPrefix(char **strs, int strsSize){ int j = 0; char *p; char result[10]; int len
#include <stdio.h>
#include <string.h>
char * longestCommonPrefix(char **strs, int strsSize){
int j = 0;
char *p;
char result[10];
int len = strlen(result);
while(j < strlen(strs[0])){
if(strs[0][j] == strs[1][j] && strs[1][j] == strs[2][j]){
result[len++] = strs[0][j];
}
j++;
}
result[len] = '\0';
p = result;
return p;
}
int main()
{
char *arr[] = {"flower", "flow", "flight"};
char **ptr;
char *out;
int size = sizeof(arr) / sizeof(arr[0]);
ptr = arr;
out = longestCommonPrefix(ptr, size);//breakpoint here shows the expected output
printf("%s", out); //does not print the output to console
}
感谢@Paul Ogilvie,我能够通过在堆中动态分配内存、strcpy到指针并返回指针来解决这个问题,因为当时本地内存不存在,我正在打印
#include <stdio.h>
#include <string.h>
char * longestCommonPrefix(char **strs, int strsSize){
int j = 0;
char* p = malloc(10 * sizeof *p);
char result[10];
int len = strlen(result);
while(j < strlen(strs[0])){
if(strs[0][j] == strs[1][j] && strs[1][j] == strs[2][j]){
result[len++] = strs[0][j];
}
j++;
}
result[len] = '\0';
strcpy(p, result);
return p;
}
int main()
{
char *arr[] = {"flower", "flow", "flight"};
char **ptr;
int size = sizeof(arr) / sizeof(arr[0]);
ptr = arr;
char *out = longestCommonPrefix(ptr, size);
printf("%s\n", out);
free(out);
}
p和result是最长公共前缀的局部变量。函数返回后,它们不再存在。一种解决方案是返回指向其中一个输入字符串的指针和整数长度。在标准C中,您只能返回一个参数,但是您可以有一个指针参数,您可以为另一个参数修改它。一个丑陋的解决方案是,将索引返回到其中一个字符串和长度,然后将其作为上限和下限值存储在一个返回的整数中,但这限制了可以处理的数组或字符串的大小;