【发布时间】:2015-10-27 04:29:19
【问题描述】:
我正在尝试创建一个程序来读取包含字母 [a-z] 的文件。然后我用 1 替换 a,用 2 替换 e,用 3 替换 i,用 4 替换 o,用 5 替换 u。我使用命令运行程序
./tr aeiou 12345
我的代码是:
#include<stdio.h>
int main(int argc, char **argv)
{
FILE *fp;
fp = fopen(argv[3], "r");
char input[100];
fscanf(fp, "%[^\n]", input);
int a = 0, b = 0;
if(argv[3][0] == '<') {
(*(argv[3]))++; //SEGFAULT
}
while(input[a] != '\0') {
if(input[a] == argv[1][b]) {
input[a] = argv[2][b];
++b;
}
++a;
}
printf("%s", input);
fclose(fp);
return 0;
}
如果我用
运行程序./tr aeiou 12345 data.txt //注意没有
然后它工作正常,但是当我使用 <.>
有没有更简单的方法来做到这一点?有什么建议么?谢谢
【问题讨论】:
-
我想你会发现
argv[3]是空的。使用调试器进行确认。您应该检查argc并记住 C 以零索引开始数组。 -
@EdHeal 你是对的,但
argv[0] = ./tr -
<是输入重定向。这不是程序参数。 -
@CrakC:我真的不在乎你相信是什么;)
-
@JackWilliams:目前无法给出正确答案,因为我们不知道您想做什么。
标签: c segmentation-fault argv