【发布时间】:2021-01-26 19:48:42
【问题描述】:
我是 C 语言的新手,我正在编写适用于文件的代码。但我无法通过终端执行它,因为我需要通过终端命令传递字符串和文件名。 P.s:我自己谷歌搜索找不到合适的解决方案,对不起,如果之前有人问过这个问题。
这是我的代码:
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#define N 102
#define n 21
void replace(char *s, int l, int r, char *s2);
int main(int argc, const char * argv[]) {
if (argc!=5) {
fprintf(stderr, "Wrong input format!\n");
exit(1);
}
FILE *fp1, *fp2;
fp1=fopen(argv[2], "r");
fp2=fopen(argv[4], "w");
if (fp1==NULL || fp2==NULL) {
fprintf(stderr, "Wrong input!\n");
exit(1);
}
char s1[n], s2[n];
strcpy(s1, argv[1]);
strcpy(s2, argv[3]);
char line[N], line2[N];
int l,r, ok;
while (fgets(line, N, fp1)) {
int i=0;
while (line[i]!='\0') {
l=r=0;
ok=1;
int k=0, j=i;
while(j<sizeof(s1)){
if (line[j]!=s1[k]) {
ok=0;
}
k++;
}
if (ok) {
replace(line, i, j, s2);
}
i++;
}
fputs(line, fp2);
}
while (fgets(line2, N, fp2)) {
puts(line2);
}
return 0;
}
void replace(char *s, int l, int r, char *s2){
char line[N], line2[N];
strncat(line, s, l);
strcat(line, s2);
int k=0, j=r+1;
while (s[j]!='\0') {
line2[k]=s[j];
k++;
j++;
}
strcat(line, line2);
strcpy(s, line);
}
【问题讨论】:
标签: c command-line terminal