Проблема при возврате указателя на строку в C - PullRequest
0 голосов
/ 21 января 2019

Я пишу код, в котором функция «verify» должна проверять, отличаются ли символы в строке или нет. Затем эта функция вызывается для каждой строки в файле. Тем не менее, хотя я проверил, и функция в порядке, есть кое-что, что я делаю неправильно, относительно возврата указателей или атрибуции в основной функции. В результате я получаю 'null null null' для каждой строки файла (в моем файле 3 строки) Это мой код:

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


char* verif (char line[])
{
    int i,j,ok=1;
    char v[5];
    for (i=0; i<strlen(line); i++)
    {
        for (j=i+1; j<strlen(line); j++)
        {
            if (line[i]==line[j])
            {
                ok=0;
                break;
            }
        }
    }
if (ok==0) strcpy(v,"No");
else strcpy(v,"Yes");

return v;

}


int main()
{
    FILE *f;
    char sir[30];
    char* ctrl;
    if ((f=fopen("fis.txt","r"))==NULL) exit(1);


    while (fscanf(f,"%[^\n]",sir))

    {
        if (fgetc(f)==EOF) break;
        puts(sir);
        ctrl=verif(sir);
        printf("%s",*ctrl);}





    }

1 Ответ

0 голосов
/ 21 января 2019

Вы возвращаете адрес локальной переменной из функции с вашим оператором return v;

Ваши варианты:

  • Объявите v как static, чтобы оно входило в раздел данных процесса, а не в локальный стек для функции.
  • Используйте кучу (malloc / free) для управления строкой в ​​v, поскольку объекты в куче сохраняются после срока действия области, в которой они объявлены, если они не освобождены.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...