在C中返回char []值

时间:2016-10-22 09:34:41

标签: c c-strings

我试图了解如何在c中返回一个字符串。我尝试了不同的方法,但没有设法做到这一点。你能编辑这段代码吗?

char dublicate(char str[])
{
    return str[20];
}

int main()
{
    char str[20];
    scanf("%s", &str);
    printf("%s", dublicate(str));
    return 0;
}

3 个答案:

答案 0 :(得分:1)

你可以这样做。 string_dupe创建从scanf发送的字符串的副本,该字符串必须使用malloc()strdup()在堆上为其分配空间。然后,指向duplicate中第一个元素的指针返回到main并打印出来。然后执行free()以释放为堆上的字符串分配的内存。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 20

char *string_dupe(char *string);

int
main(void) {
    char str[SIZE];
    char *strcopy = NULL;

    printf("Enter string: ");
    scanf("%s", str);

    strcopy = string_dupe(str);

    printf("\nYour copied string: %s", strcopy);

    free(strcopy);

    return 0;
}

char 
*string_dupe(char *string) {
    char *duplicate = NULL;

    if ((duplicate = malloc(strlen(string)+1)) == NULL) {
        fprintf(stderr, "Memory not allocated\n");
        exit(EXIT_FAILURE);
    }

    strcpy(duplicate, string);

    return duplicate;
}

答案 1 :(得分:-1)

更改dublicate的返回类型,并在您对str的通话中更改您对scanf的阅读方式:

char *dublicate(char str[])
{
    return str;
}

int main() {
    char str[20];
    scanf("%s", str);
    printf("%s", dublicate(str));
    return 0;
}

答案 2 :(得分:-2)

字符串本质上是指向字符串的第一个字符的指针。 (字符串的结尾由&#39; \ 0&#39;字符决定。)所以你必须返回的只是一个字符指针。