2011-10-14 88 views
0

什麼似乎與我的這部分代碼的問題:問題與字符指針

while(c != EOF){  
    c = fgetc(myFile); 
    p[i++]=c; 
    printf("%c", p[i]); 
} 

它似乎並不值存儲在p[i]即使成功的malloc,並打印垃圾。但是這個代碼打印字符罰款:

while(c != EOF){  
    c = fgetc(myFile); 
    //p[i++]=c; 
    printf("%c", c); 
} 

pchar*i最初0。 在問題中提問Not getting all characters after reading from file

這裏有什麼問題?

+0

這將使它更容易爲人們在這裏回答你的問題,如果你發佈之前格式化它們。任何一致的風格將會做;) –

+0

縮進真的很奇怪(縮進3-7個空格,有時縮進'if' /'else',有時不縮小等等)。大多數編輯會做自動縮進。 –

+0

@BrendanLong:手指也是這樣做的 –

回答

3

該行p[i++] = c存儲字符和增量i。下一行打印p[i],但我已經增加了。試試這個:

while(c!=EOF){  
    c=fgetc(myFile); 
    p[i]=c; 
    printf("%c",p[i]); 

    i++; 
} 

作爲一個側面說明,你很可能把它改寫

while((c = fgetc(stdin)) != EOF) 
    *p++ = c; 
+0

NO ...我分配了'char * p =(char *)malloc((count + 1));' - 實際上甚至是'char * p =(char *)malloc(( count * 2));'這並不能解決我的問題。'count'是總數。的文件中的字符。 –

+0

@cnicutar - 'while(c!= EOF){c = fgetc(myFile); p [i] = c; printf(「%c」,p [i ++]); ; }'這樣做謝謝:) –

+0

@BrendanLong - cnicutar編輯他的帖子。 –

0

問題是,

while(c!=EOF){  
       c=fgetc(myFile); 
       p[i++]=c; 
       printf("%c",p[i]); 
      } 

看看P [我++] = C,它存儲在p [i]中c的值比i增加1, ,所以當你使用p [i]來打印你指向可能存在垃圾的另一個存儲位置的字符時。

0

在存儲字符後,您正在增加i,因此您正在打印下一個位置,您尚未存儲任何東西。

改變線路:

p[i]=c; 
printf("%c",p[i++]);