Чтобы сравнить всю строку, можно использовать fgets для чтения строки и использовать strcmp для сравнения с третьим аргументом:
void SustChar(char *argv[]){
char linebuf[80];
FILE *ptrf;
ptrf = fopen(argv[1],"r");
FILE *ptrs;
ptrs = fopen(argv[5],"w");
// read line into a linebuf
while(fgets(linebuf, 80, ptrf) != NULL){
linebuf[strlen(linebuf)-2] = '\0'; // remove newline character
// if the line matches the third argument
if (!strcmp(linebuf, argv[3])) {
fputs(argv[4], ptrs);
} else {
fputs(linebuf, ptrs);
}
}
fclose(ptrs);
fclose(ptrf);
}
Если вас интересует конкретное слово в этой строке, предполагая, что словаограничены одним пробелом, можно использовать функцию strchr для извлечения слов, а затем сравнить их с третьим аргументом.
void SustChar(char *argv[]){
char linebuf[80];
FILE *ptrf;
ptrf = fopen(argv[1],"r");
FILE *ptrs;
ptrs = fopen(argv[5],"w");
// read one line into a linebuf
while(fgets(linebuf, 80, ptrf) != NULL) {
// remove newline character
linebuf[strlen(linebuf)-2] = '\0';
// get a pointer to the second word in the line
char *secondword = strchr(strchr(linebuf, ' ') + 1, ' ');
assert(secondword != NULL);
// get length of the second word
char *thirdword = strchr(secondword , ' ');
size_t secondwordlen = thirdword == NULL ? strlen(secondword) : thirdword - secondword;
// if the second word matches the third argument
if (!memcmp(secondword , argv[3], secondwordlen)) {
secondword[0] = '\0'; // remove second word from linebuf
fputs(linebuf, ptrs); // print first word
fputs(argv[3], ptrs); // print second word substituted by argv[3]
fputs(thirdword, ptrs); // print the rest of the line
} else {
fputs(linebuf, ptrs);
}
}
fclose(ptrs);
fclose(ptrf);
}