2011-10-14 58 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++]);