longestCommonPrefix возвращается из функции, но не выводится на консоль в C - PullRequest
0 голосов
/ 09 января 2020

В приведенном ниже коде функция возвращает указатель на символ "p" и сохраняется в переменной "out", которая также является указателем. Когда я пытаюсь печатать с помощью оператора printf, он ничего не выводит на консоль. Любые указатели?

#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
}

1 Ответ

1 голос
/ 10 января 2020

Спасибо @Paul Ogilv ie, я смог решить это путем динамического выделения памяти c в куче, 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...