首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >longestCommonPrefix从函数返回,但未打印到C中的控制台

longestCommonPrefix从函数返回,但未打印到C中的控制台
EN

Stack Overflow用户
提问于 2020-01-10 01:02:24
回答 1查看 40关注 0票数 0

在下面的代码中,函数返回一个字符指针"p“,并存储在"out”变量中,该变量也是一个指针。当我尝试使用printf语句打印时,它没有向控制台输出任何内容,有任何指针吗?

代码语言:javascript
运行
复制
#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
}
EN

回答 1

Stack Overflow用户

发布于 2020-01-10 10:04:29

谢谢@Paul Ogilvie,我能够通过在堆中动态分配内存,strcpy到指针并返回指针来解决这个问题,因为当我打印时,本地内存还不存在。

代码语言:javascript
运行
复制
#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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59668892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档