字符单元化和拷贝的问题?

完美教父 2018-02-10 04:41:35
#include <stdio.h>
#include <string.h>
char ch1(char num[]);
int main(void)
{
char num1[100];
scanf("%s",&num1);
ch1(num1);

return 0;
}
char ch1(char num[])
{
char numm[100];
char ion[] = {',','.'};
char *temp = strtok(num,ion);
while(temp)
{
//printf("%s ",temp);
strcpy(numm,temp);
printf("%s ",numm);
temp = strtok(NULL,ion);
}
printf("\n");
}
以上代码运行后,如果我输入“www.sohu.com”不带两个双引号,结果为下图:

为什么会少一个o呢?
如果如下图这样输入就可以,好像O不可以重复:

请指点,谢谢!
...全文
989 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
donjin9 2018-02-11
  • 打赏
  • 举报
回复
char ion[] = ",.";
赵4老师 2018-02-11
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!) VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
kuangbao9 2018-02-11
  • 打赏
  • 举报
回复
版主说的对,我看了一下,是不是和什么内存重叠有关呢?而且我发现原来的代码只会把偶数个o去掉,奇数的时候不会,比如wow.sohu.bob.fof.com,结果为wow s hu bob f f com,不是很明白为啥,等待高人了
paschen 2018-02-10
  • 打赏
  • 举报
回复
strcpy(numm,temp); printf("%s ",numm); 这两句直接换成 printf("%s ", temp); 不就行了 否则你都把numm污染了,后面出现这样的结果也就不足为奇了

69,374

社区成员

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

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