我做了一个程序,其中包含“SHaddOW”这个单词,并将其分为2个单词:SHOW
和add
。
这是大写字符的一个单词和小写字符的另一个单词。但是当我运行该程序时,我遇到了一些问题。
#include <stdlib.h>
#include <string.h>
#define SIZE 10
int main()
{
int i = 0;
int countbig = 0 , countsmall = 0;
char str[] = "SHaddOW";
char smallStr[SIZE] , bigStr[SIZE];
for (i = 0; i <= strlen(str) ; i++)
{
if (str[i]>= 'A' && str[i]<='Z')
{
bigStr[countbig] = str[i];
countbig++;
}
else if (str[i] >= 'a' && str[i] <= 'z')
{
smallStr[countsmall] = str[i];
countsmall++;
}
}
puts(smallStr);
puts(bigStr);
system("PAUSE");
return 0;
}
当我运行该程序时,它显示:
答案 0 :(得分:3)
puts( smallStr );
继续编写smallStr
指向的任何内容,直到它命中空字节('\0'
)。
您永远不会在smallStr
或bigStr
中写入空字节,因此您会看到正在观察的乱码输出。 (很高兴程序没有崩溃,因为它不应该访问内存。)
在循环结束时,终止字符串:
smallStr[ countsmall ] = '\0';
bigStr[ countbig ] = '\0';
这应该有所帮助。
答案 1 :(得分:1)
这是因为没有做空终止所以, 做
的初始化 char smallStr[SIZE] = {0} , bigStr[SIZE] = {0};
或
在循环结束后完成循环后的空终止
smallStr[ countsmall ] = '\0';
bigStr[ countbig ] = '\0';
您将获得正确的结果。
答案 2 :(得分:1)
试试此代码
#include <stdlib.h>
#include <string.h>
#define SIZE 10
int main()
{
int i = 0;
int countbig = 0 , countsmall = 0;
char str[] = "SHaddOW";
char smallStr[SIZE] , bigStr[SIZE];
for (i = 0; i < strlen(str) ; i++)
{
if (str[i]>= 'A' && str[i]<='Z')
{
bigStr[countbig] = str[i];
countbig++;
}
else if (str[i] >= 'a' && str[i] <= 'z')
{
smallStr[countsmall] = str[i];
countsmall++;
}
}
bigStr[countbig]='\0';
smallStr[countsmall] = '\0';
puts(smallStr);
puts(bigStr);
system("PAUSE");
return 0;
}
你应该添加\0
来结束字符串,直到i
小于字符串的长度。
答案 3 :(得分:0)
#include <stdlib.h>
#include <string.h>
#define SIZE 10
int main()
{
int i = 0;
int countbig = 0 , countsmall = 0;
char str[] = "SHaddOW";
char smallStr[SIZE] , bigStr[SIZE];
for (i = 0; i <= strlen(str) ; i++)
{
if (str[i]>= 'A' && str[i]<='Z')
{
bigStr[countbig] = str[i];
countbig++;
}
if (str[i] >= 'a' && str[i] <= 'z')
{
smallStr[countsmall] = str[i];
countsmall++;
}
}
bigStr[countbig] ='\0'; //you need to add null character at the end
smallStr[countsmall] = '\0';//you need to add null character at the end
puts(smallStr);
puts(bigStr);
system("PAUSE");
return 0;
}