c - 在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);}
}
解决方案
您正在使用语句从函数返回局部变量的地址return v;
您的选择:
- 声明
v
为static
, 以便它进入进程的数据部分,而不是函数的本地堆栈。 - 使用堆 (
malloc
/free
) 来管理 in 中的字符串v
,因为如果堆上的对象没有被释放,它们会在它们声明的范围的生命周期之外持续存在。
推荐阅读
- angular - mat-error 没有出现在 ControlValueAccessor 中
- azure - 降低流分析集群的成本
- express - 将 Keycloak 添加到 express 服务器以从请求中获取 kauth
- python - 如何找到 SVM 和朴素贝叶斯的 top-k 精度
- drake - 可以从 6x6 矩阵构造 SpatialInertia 对象吗?
- angular - Angular monorepo 错误 TS6059:文件“ng-youtube-api.service.ngtypecheck.ts”不在“rootDir”下。'rootDir' 应包含所有源文件
- typescript - vue 3 typescript Uncaught (in promise) TypeError: this.$on is not a function
- scipy - 有没有办法使用 scipy.interpolate 进行 1d 样条插值,边界条件指定远离数据?
- python - 无法在我的虚拟机上使用 Selenium Webdriver 进行身份验证和登录
- python - 从数据框列表创建 3d 曲面图