我试图了解如何在c中返回一个字符串。我尝试了不同的方法,但没有设法做到这一点。你能编辑这段代码吗?
char dublicate(char str[])
{
return str[20];
}
int main()
{
char str[20];
scanf("%s", &str);
printf("%s", dublicate(str));
return 0;
}
答案 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;字符决定。)所以你必须返回的只是一个字符指针。