作者whitefur (白毛)
看板C_and_CPP
标题[问题] while里跑printf会把字串覆盖掉
时间Mon Jun 15 01:15:27 2009
#include<stdio.h>
#include<string.h>
int main()
{
char input[80]={'\0'},origin[80]={'\0'},tmp[80]={'\0'};
char *token;
while(fgets(input,80,stdin))
{
strcpy(origin,input);
strtok(origin,"\n");
token=strtok(input," ");
token=strtok(NULL," \n");
if(strncmp("RSUB",token,4)==0)
strcpy(tmp," 4C0000");
printf("%s%s\n",origin,tmp);
}
return 0;
}
================================================
我用a.out<fin.txt的方式输入
fin.txt的内容如下
================================================
1000 RSUB
1000 RSUB
1000 RSUB
1000 RSUB
================================================
我预期的结果应该是
1000 RSUB 4C0000
1000 RSUB 4C0000
1000 RSUB 4C0000
1000 RSUB 4C0000
================================================
可是跑出来的结果却是
4C0000UB
4C0000UB
4C0000UB
4C0000UB
(每一行前面的1000 RS都被4C0000覆盖掉了)
我用a.out<fin.txt来输入就会出现这个问题
可是如果我用复制贴上来输入就不会有这个问题
为什麽会这样啊
我找不出哪里有问题
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.119.135.80
1F:→ qazq:因为 origin 中为 "1000 RSUB\r\n" 你只把 \n 拿掉。 06/15 09:24
2F:→ whitefur:请问\r是…? 06/15 16:19
3F:→ whitefur:为何会出现\r呢 06/15 16:29
4F:推 VictorTom:Windows系统的换行就是\r\n, 分别表示return与new line 06/15 18:14
5F:→ VictorTom:\n\r还是\r\n啊!?记不清楚了, 总之就是txt的换行在MSwin 06/15 18:15
6F:→ VictorTom:下就是用了这两个byte来完成; \r会列头, \n下移新行; 06/15 18:16
7F:→ VictorTom:印像中大概就是这样; 不过print的时候\n就行了.... 06/15 18:16