【问题标题】:Stucking about strcpy at C卡在 C 中的 strcpy
【发布时间】:2020-08-29 22:30:19
【问题描述】:

我无法理解这段代码我已经留下了关于 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;

}

【问题讨论】:

标签: c


【解决方案1】:

声明

strcpy(read1,"\0");

只是复制一个空字符串来初始化read1

这是一种愚蠢的做法; read1[0] = 0; 一样好,但正如 @chux 在 cmets 中指出的那样,初始化 read1 是不必要的,而且代码还有其他问题(例如,检查 fgets 的结果)。

【讨论】:

    【解决方案2】:

    您可以在下面查看 strcpy 的文档。
    https://i.stack.imgur.com/AN38r.png

    您可以看到 strcpy 在第一个字符串参数中复制了第二个字符串参数。第一个参数是复制字符串的目的地。第二个参数是复制完整字符串的来源。

    因此我们可以说strcpy这一行只是为了保证read1在读取下一行之前始终为空。

    如果我们跳过这一行,那么先前读取的行的长度大于当前行的情况可能会产生错误。 这几乎是一个多余的步骤,因为 fgets 将 '\n' 替换为 '\0'。因此,后面的字符无关紧要。

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 2013-01-06
      • 2023-03-27
      • 2021-08-12
      • 2013-10-18
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      相关资源
      最近更新 更多