一个函数不能返回没有指针的字符串?

时间:2010-07-16 10:38:28

标签: c

返回字符串时遇到一个奇怪的问题。 它说不能将int转换为const char *

#include<stdio.h>
#include<conio.h>
#include <string.h>
/*The above program shows that you can not return a string from a function normally*/
char check(char str[]);
void main(void)
{
    char str[30],str2[30];
    printf("Enter a sentence:");
    gets(str);
    strcpy(str2,check(str));
    getch();
}
char  check(char str[30])
{
    return str;
}

6 个答案:

答案 0 :(得分:6)

您必须返回char *而不是

答案 1 :(得分:4)

不,字符串不是C中的内在数据类型。请参阅http://c-faq.com/aryptr/index.html

此外,如果您不想在代码中构建错误,请忘记gets()存在并使用fgets()http://c-faq.com/stdio/getsvsfgets.html

答案 2 :(得分:3)

C编程语言没有数据类型“string”。 C支持char数组和指向char的指针。

您可以使用指针来解决char数组:

char *p;
char str[30];

p = str;

您的函数必须返回指向字符的指针。将代码更改为

char* check(char str[30])
{
    return str;
}

会奏效。您必须记住,您返回已传递给函数的参数的地址。

如果要填充函数中的任何结果变量,请将地址传递给函数:

int check(char* result, char str[]);

void main(void)
{
    char str[30], str2[30];

    printf("Enter a sentence:");
    gets(str);

    if (check(str2, str))
    {
      printf("check succeeded %s\n", str2);
    }

    getch();
}

int check(char* result, char str[30])
{
    int success;

    success = ....;

    if (success)
    {
        strcpy(result, str);
    }

    return v;
}

答案 3 :(得分:2)

在检查功能的返回类型中是否缺少“*”?

应该是

char*

而不是

char

答案 4 :(得分:1)

不,你需要这样做:

#include<stdio.h>
#include<conio.h>
#include <string.h>
/*The above program shows that you can not return a string from a function normally*/
char check(char str[]);
void main(void)
{
   char str[30],str2[30];
   printf("Enter a sentence:");
   gets(str);
   strcpy(str2,check(str));
   getch();
}
char  *check(char str[30])
{
    return str;
}

您还可以修改函数中的字符串而不返回它,前提是您不要尝试重新分配其大小,例如:

#include<stdio.h>
#include<conio.h>
#include <string.h>
/*The above program shows that you can not return a string from a function normally*/
void check(char *str);
void main(void)
{
   char str2[30];
   char *str;

   str = malloc(30);
   printf("Enter a sentence:");
   gets(str);
   check(str);
   strcpy(str2,str);
   getch();
}
void check(char *str)
{
    strcpy(str, "test");
}

答案 5 :(得分:1)

编译:

#include<stdio.h>
#include <string.h>
/*The above program shows that you can not return a string from a function normally*/
char *check(char **str);

int main(void)
{
    char str[30],str2[30];
    char *p;
    p=str;
    printf("Enter a sentence:");
    fgets(str, sizeof str, stdin);
    strcpy(str2,check(&p));
    printf("You said: %s\n", str2);

    return 0;
}

char  *check(char **str)
{
    return *str;
}