簡體   English   中英

在 C 卡住 strcpy

[英]Stucking about strcpy at 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;

}

該聲明

strcpy(read1,"\0");

只是復制一個空字符串來初始化read1

這是一種愚蠢的做法; read1[0] = 0; 一樣好,但正如@chux 在評論中指出的那樣,初始化read1不是必需的,並且代碼還有其他問題(例如,檢查fgets的結果)。

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

您可以看到 strcpy 在第一個字符串參數中復制了第二個字符串參數。 第一個參數是復制字符串的目的地。 第二個參數是復制完整字符串的來源。

因此我們可以說 strcpy 行只是為了確保在讀取下一行之前 read1 始終為空。

如果我們跳過這一行,那么先前讀取的行的長度超過當前行的長度的情況可能會出錯。 這幾乎是一個多余的步驟,因為 fgets 將“\n”替換為“\0”。 因此,之后的字符無關緊要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM