[英]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.