字符拷贝的时候怎么会多了许多奇怪的字符

winterleaf 2003-08-21 10:15:40
<<The C Programming Language>>中文版练习1-13
题目是这样的:编写一个程序,打印其输入的文件中的单词的长度的直方图。

/* 从字符串中取出各个单词,存放在一个二唯数组中,然后根据每个单词的长度来打印*,作为单词的长度直方图

*/

#include <stdio.h>
#include <string.h>
#define OUT 0 /* 在单词外 */
#define IN 1 /* 在单词内 */

int main()
{
int i,j,iWordState=OUT; /* 单词初始状态为OUT */
int jw=0,kw;
int len; /* 单词的长度 */
char sInput[60]; /* 用户输入的字符串数组 */
char chWord[10][12]; /* 取出的单词存放在此二维数组 */

printf ("Please enter a string.\n");
gets (sInput);

for (i=0; sInput[i]!='\0'; i++){
if ((sInput[i]>='a' && sInput[i]<='z') || (sInput[i]>='A' && sInput[i]<='Z')){
if (iWordState==OUT){
iWordState=IN;
kw=0;
chWord[jw++][kw]=sInput[i];


}
else {
++kw;
chWord[jw-1][kw]=sInput[i];

}
}
else
iWordState=OUT;

}


for (i=0; i<jw; i++){
printf ("\n");
printf ("%-10s",chWord[i]);
len = strlen(chWord[i]);
for (j=0; j<len; j++)
printf ("*");
}
printf ("\n");
system ("PAUSE");
return 0;
}

但是总有些问题,比如输入
i love you
结果却是

i *
love← *****
you ***

love后面怎么会多了一个箭头?怎么回事?
...全文
148 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhgary 2003-08-21
  • 打赏
  • 举报
回复
字符串后面都有一个\0字符作为结束的,只是你看不见而已,但是系统处理的时候却是以此为准的,它碰不到\0就会一直往后找,都当作这个字符串的内容。
aflyinghorse 2003-08-21
  • 打赏
  • 举报
回复
楼上正确
C语言中用字符数组表示字符串,
并以'\0'作为字符串的结束标志

leafxx 2003-08-21
  • 打赏
  • 举报
回复
这是因为chWord[i]的最后一位没有字符串结束标示'\0'
加上就可以了

/* 从字符串中取出各个单词,存放在一个二唯数组中,然后根据每个单词的长度来打印*,
作为单词的长度直方图

*/

#include <stdio.h>
#include <string.h>
#define OUT 0 /* 在单词外 */
#define IN 1 /* 在单词内 */

int main()
{
int i,j,iWordState=OUT; /* 单词初始状态为OUT */
int jw=0,kw;
int len; /* 单词的长度 */
char sInput[60]; /* 用户输入的字符串数组 */
char chWord[10][12]; /* 取出的单词存放在此二维数组 */

printf ("Please enter a string.\n");
gets (sInput);

for (i=0; sInput[i]!='\0'; i++){
if ((sInput[i]>='a' && sInput[i]<='z') || (sInput[i]>='A' && sInput[i]<='Z')){
if (iWordState==OUT){
iWordState=IN;
kw=0;
chWord[jw++][kw]=sInput[i];


}
else {
++kw;
chWord[jw-1][kw]=sInput[i];

}
}
else{
iWordState=OUT;
chWord[jw-1][kw+1]='\0';

}
}
chWord[jw-1][kw+1]='\0';

for (i=0; i<jw; i++){
printf ("\n");
printf ("%-10s",chWord[i]);
len = strlen(chWord[i]);
for (j=0; j<len; j++)
printf ("*");
}
printf ("\n");
system ("PAUSE");
return 0;
}

69,368

社区成员

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

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