函数无法返回字符串

时间:2015-10-15 22:41:26

标签: c string function

我在使用此函数返回字符串时遇到问题:

char setup(){

    puts("Please select a size for the string");
    scanf("%d", &size);
    getchar();

    char sequence[size];

    printf("Please write any sequence of %d numbers\n", size);
    fgets(sequence, size+1, stdin);

return *sequence;
}

将大小设置为全局变量。 主要是:

int main(){

    int program=0;
    char sequence_alt[size];

    puts("Please select the number of the program to test:");
    scanf("%d", &program);
    getchar();

    switch(program){
    case 1:
        sequence_alt[size]=setup();
        break;

开关继续,但在这种情况下没有添加任何其他内容。如果我选择大小5,而不是获得完整的字符串,如12345,我只得到第一个字符。 我已经搜索了很多指南,但是我仍然无法理解问题是否真的在我的函数中,或者当我打印序列的值时我的主要问题。任何小费和帮助都会很棒,而且我会永远感激不尽。对不起,如果代码太简陋,但我仍然在学习C时迈出了我的第一步。

谢谢!

2 个答案:

答案 0 :(得分:1)

您的函数必须返回char *(不是char}

char setup(){
    ...
    return *sequence;
}

应该是

char *setup(void){
    ...
    return sequence;
}
char sequence[size];

sequence是一个本地数组,当函数结束时,它的生命周期结束,使用动态内存:

char *sequence = malloc(size);

size+1中使用fgets,您可以在数组的边界外写字,更改

fgets(sequence, size+1, stdin);

fgets(sequence, size, stdin);

答案 1 :(得分:0)

就像上面解释的那样,你的函数应该返回char *来获取一个字符串(char指针),你也应该知道你从函数返回时在函数块中创建的任何内容都会消失。所以序列只能返回第一个字符,即使它是char *,因为没有为该字符串的字符串分配内存。以下将正常工作

char* setup(){

    puts("Please select a size for the string");
    scanf("%d", &size);
    getchar();

    char *sequence = malloc(sizeof(int) * size);

    printf("Please write any sequence of %d numbers\n", size);
    fgets(sequence, size+1, stdin);

    return sequence;
}