LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 843|回复: 12

请教printf的奇怪输出问题

[复制链接]
发表于 2004-8-7 08:08:55 | 显示全部楼层 |阅读模式
printf ("Subj: [%s] \n",mTemp);
mTemp中为 hello superman , 加上'\0'其strlen为15
可用上述命令在linux终端下打印出来却是
] bj: [hello superman
为什么会覆盖掉头两个字符?
发表于 2004-8-7 08:33:21 | 显示全部楼层
真奇怪,似乎屁股把脑袋给覆盖掉了,你44看用
fprintf(stdout, ("Subj: [%s] \n",mTemp);
看看结果是不是还是这样?
 楼主| 发表于 2004-8-7 08:38:51 | 显示全部楼层
:-(
结果还是一样

可用%c 参数一个一个输出直至遇到 '\0' , 结果却是对的.
发表于 2004-8-7 09:46:54 | 显示全部楼层
把你对mTemp的定义贴出来看看。
 楼主| 发表于 2004-8-7 10:05:35 | 显示全部楼层
if (p) {
         i=0;
         p=p+9;
//q=strstr(p,"\n");                    //Subject: =?gb2312?b?xOO6ww==?=..
         q=p;
         do {q++;i++;} while (*q!='\n');
         memset(mTemp,'\0',sizeof(mTemp));
         strncpy (mTemp,p,i);
         p=mTemp;
         while (*p!='\0') {
                 if (p=='\r') printf ("\nenter found!\n");
                 printf ("%c",*p);
                 p++;
         }
         printf ("\n");
       //  printf ("Subj: [%s] \n",mTemp);
       //  printf ("sizeof (Subj) is %d\n",strlen(mTemp));
       fprintf(stdout, "Subj: [%s] \n",mTemp);
 楼主| 发表于 2004-8-7 10:07:51 | 显示全部楼层
大意是定位字符串Subject: ,然后找到换行符,也就是这个字符串内容的结束处,中间计算要复制内容的字数,然后strncpy...
 楼主| 发表于 2004-8-7 10:09:47 | 显示全部楼层
q=p=strstr(iphead+52,"To: ");              //receiveor info
      if (q) {
         p+=4;
         q=p;
         i=0;
         do {q++;i++;} while (*q!='@');       //To: josfar@21cn.com..
         memset(mTemp,'\0',sizeof(mTemp));
         strncpy (mTemp,p,i);
         printf ("To: [%s]\n",mTemp);
         strcat (mInfobuf,"|\"");             //"sender"|"
         strcat (mInfobuf,mTemp);    //          receiveor
        }
这是之前对收件人信息的处理代码,结果是对的。
问题中对主题的处理和这个机理完全一样。
发表于 2004-8-7 10:32:11 | 显示全部楼层
你始终没有告诉我mTemp到底是什么类型呀,是字符串数组,还是字符串指针?我想看,你是不是有内存非法操作,比方说你定义了char *mTemp,而你却使用了memset(mTemp,'\0',sizeof(mTemp));。这个时候sizeof(mTemp)只能等于这个指针所占用的空间,而不是字符串长度应该占用的空间。
还有,贴代码的时候,前后请加上[/code]和[code],请倒过来用,谢谢。。
 楼主| 发表于 2004-8-7 10:43:12 | 显示全部楼层
不好意思啊。
code
mTemp定义为char mTemp [30];
/code
 楼主| 发表于 2004-8-7 10:45:07 | 显示全部楼层
  1. char mTemp [30];
  2. int i;
  3. if (p) {
  4. i=0;
  5. p=p+9;
  6. //q=strstr(p,"\n"); //Subject: =?gb2312?b?xOO6ww==?=..
  7. q=p;
  8. do {q++;i++;} while (*q!='\n');
  9. memset(mTemp,'\0',sizeof(mTemp));
  10. strncpy (mTemp,p,i);
  11. p=mTemp;
  12. while (*p!='\0') {
  13. if (p=='\r') printf ("\nenter found!\n");
  14. printf ("%c",*p);
  15. p++;
  16. }
  17. printf ("\n");
  18. // printf ("Subj: [%s] \n",mTemp);
  19. // printf ("sizeof (Subj) is %d\n",strlen(mTemp));
  20. fprintf(stdout, "Subj: [%s] \n",mTemp);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表