求助~while中的printf

xiaomuyoo 2011-08-03 12:59:27
如代码中所示,在运行程序时,while循环里if语句下的printf函数能正确打印字符串;可是出了循环我再打印时(printf 'out of while'那句)就没有数据了,如此有意思的现象求解释啊~

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define SIZE 50

//函数功能是读取一个文件,然后用一个char型的指针数组存储
//数组每一个元素指向从文件读取的每一行
void readLines(char *cont[])
{
FILE *fp;
int i = 0;
int j = 0;
char ch;

fp = fopen("ft_member.txt","r");
if ( fp == NULL )
{
printf("No such file: ft_member\n ");
exit(0);
}

char c[SIZE];
while ( (ch = getc(fp))!= EOF )
{
if (ch == '\n')
{
cont[j] = c;
printf("%s\n",cont[j]); //此处能正常打印cont[j]所指向的字符串
memset(c,0,SIZE);
i = 0;
j++;
}
else
{
c[i] = ch;
i++;
}
}
printf("out of while: %s\n",cont[1]); //这里就打印不出字符串了
fclose(fp);
}

int main()
{
char *lines[SIZE];

printf("read lines start....\n");
readLines(lines);
printf("read lines end....\n");

return 0;
}
...全文
242 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomuyoo 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiaomuyoo 的回复:]
如代码中所示,在运行程序时,while循环里if语句下的printf函数能正确打印字符串;可是出了循环我再打印时(printf 'out of while'那句)就没有数据了,如此有意思的现象求解释啊~

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define SIZE 50

//函数功能是读取一个文……
[/Quote]

额 想得有问题,数组c是字符型的,每一个元素就占一个字节……

不过问题确实是在memset函数之前设break第二个print"out of ..."就能正常打印
xiaomuyoo 2011-08-03
  • 打赏
  • 举报
回复
额 找到问题,在于函数memset。若将break设在它之前,那么两个printf都正常
查了一下memset函数,是将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值。它是以字节为单位进行赋值的。那么c的每个元素都是一个指针,在我这个程序的环境下占8个字节,它赋值将50个字节赋值为0,那就等于是将数组的前6个指针元素本来占得字节全抹成0了

不过具体详细的还希望各位大侠指导!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧