首页 > 解决方案 > 在C中返回指向字符串的指针时出现问题

问题描述

我正在编写一个代码,其中函数“verif”应该验证字符串中的字符是否不同。然后为文件中的每一行调用此函数。然而,虽然我验证了并且函数没问题,但关于指针的返回或主函数中的属性,我做错了一些事情。我得到的结果是文件每一行的'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);}





    }

标签: carraysstringfunction

解决方案


您正在使用语句从函数返回局部变量的地址return v;

您的选择:

  • 声明vstatic, 以便它进入进程的数据部分,而不是函数的本地堆栈。
  • 使用堆 ( malloc/ free) 来管理 in 中的字符串v,因为如果堆上的对象没有被释放,它们会在它们声明的范围的生命周期之外持续存在。

推荐阅读