java duplicate parameter e_传递参数[duplicate]时出现问题

我试图写一个函数,它接收一个指向一个文件的指针和两个字符串(一个文件名和一个模式)。它应该请求一个文件名,并在错误检查时打开一个文件。但是代码不能编译,我花了几个小时寻找原因。

#include

#include

#include

#define LEN 41

char* s_gets(char *str, int len);

void openFilename(FILE* fp, char* fname, char* mode);

int main(void)

{

char fname[LEN];

FILE *fp = NULL;

int ch;

// This works

printf("Enter a filename: ");

s_gets(fname, LEN);

fp = fopen(fname, "r");

// This does not

// openFilename(fp, fname, "r");

while ((ch = getc(fp)) != EOF)

putchar(ch);

fclose(fp);

return 0;

}

char* s_gets(char *str, int len)

{

char* ret_val;

char* newline;

ret_val = fgets(str, len, stdin);

if (ret_val) {

newline = strchr(str, '\n');

if (newline)

*newline = '\0';

else

while (getchar() != '\n') continue;

}

return ret_val;

}

void openFilename(FILE *fp, char *fn, char *mode)

{

printf("Enter a filename: ");

s_gets(fn, LEN);

printf("Opening %s... ", fn); // This never runs!

if ((fp = fopen(fn, mode)) == NULL) {

fprintf(stderr, "Couldn't open %s. Quitting.\n", fn);

exit(EXIT_FAILURE);

}

}

这个

s_gets()

如果我从main调用函数,它的工作正常,但是只要我从

openFilename()

我得到了

Segmentation fault: 11

这通常和数组越界有关,对吧?我假设这个字符串不能正确传递

openFilename()

,但我怎么能做到呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值