我听不懂这段代码,没有在strcopy上添加注释行。你能跟我解释一下吗?谢谢了我是c的新手,正在努力提高自己。有时我会停留在某个地方,在这种情况下我找不到任何解决方案。
#include <stdio.h>
#include <string.h>
#define SIZE 1000
int main(){
int lwd,cnt;
char read1[SIZE];
char true;
FILE *r = fopen("test.txt","r");
if(r==NULL){
printf("Er.");
}
FILE *cpy =fopen("temp","w");
if(cpy==NULL){
printf("Er.");
fclose(r);
}
printf("Please enter whic line you wanna remove:");
scanf("%d",&lwd);
while(!feof(r)){
strcpy(read1,"\0"); // what does it mean?
fgets(read1,SIZE,r);
if(!feof(r)){
cnt++;
if(cnt != lwd){
fprintf(cpy,"%s",read1);
}
}
}
fclose(r);
fclose(cpy);
remove("test.txt");
rename("temp","test.txt");
FILE *read;
read = fopen("test.txt","r");
if(read == NULL){
printf("Error.");
fclose(read);
}
true=fgetc(read);
while(true != EOF){
printf("%c",true);
true=fgetc(read);
}
getch();
return 0;
}
答案 0 :(得分:1)
声明
strcpy(read1,"\0");
只是复制一个空字符串以初始化read1
。
这样做很愚蠢; read1[0] = 0;
一样好,但是正如@chux在注释中指出的那样,不需要初始化read1
,并且代码还有其他问题(例如,检查{{1}的结果) }。
答案 1 :(得分:1)
您可以在下面查看有关strcpy的文档。
https://i.stack.imgur.com/AN38r.png
您可以看到strcpy在第一个字符串参数中复制了第二个字符串参数。第一个参数是将字符串复制到的目标位置。第二个参数是复制完整字符串的来源。
因此,我们可以说strcpy行只是为了确保read1在读取下一行之前始终为空。
如果我们跳过此行,则先前读取的行的长度大于当前行的长度的情况可能会导致错误。 这几乎是多余的步骤,因为fgets将'\ n'替换为'\ 0'。因此,之后的字符无关紧要。