Не может ли функция вернуть строку без указателей? - PullRequest
1 голос
/ 16 июля 2010

У меня странная проблема при возврате строки. он говорит, что не может конвертировать 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 ]

6 голосов
/ 16 июля 2010

Вы должны вернуть символ * вместо

4 голосов
/ 16 июля 2010

Нет, строки не являются внутренними типами данных в C.fgets() если вы не хотите встраивать ошибки в ваш код.http://c -faq.com / STDIO / getsvsfgets.html

3 голосов
/ 16 июля 2010

Язык программирования C не имеет типа данных "строка".C поддерживает массивы и указатели на 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;
}
2 голосов
/ 16 июля 2010

Вам не хватает "*" в возвращаемом типе функции проверки?

должно быть

char*

вместо

char
1 голос
/ 16 июля 2010

Это компилируется:

#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;
}
1 голос
/ 16 июля 2010

Нет, вам нужно сделать:

#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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...