在C停留在strcpy

时间:2020-08-29 22:30:19

标签: c

我听不懂这段代码,没有在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;

}

2 个答案:

答案 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'。因此,之后的字符无关紧要。

相关问题