我宣布一个空字符串:
char str[MAX_LEN] = "\0"; //empty String
然后
void InitString(char *str,int maxlenght)
{
char input = 0;
int counter = 0,i;
for(i = 0;i<(maxlenght);i++)
{
*(str+i) = '\0';
}
getchar();
printf("\nEnter new string of max %d chars: ",maxlenght);
while (input != '\r' && counter < (maxlenght-1))
{
input = getche();
*(str+counter) = input;
counter++;
}
}
void PrintString(char *str)
{
int i = 0;
printf("\nThe String Created is : ");
puts(str);
while(*(str+i) != '\0')
{
printf("%c", *(str+i));
i++;
}
}
我不知道为什么这段代码的行为不同,因为代码在逻辑上与上层代码相同。
int CountWords(char *str)
{
int i = 0;
char ch;
while(*(str+i) != '\0')
{
printf("%d", *(str+i));
ch = *(str+i);
printf("%c",ch);
numNumber++;
i++;
}
return i;
}
即使测试条件相同,下部代码块也没有输出。
答案 0 :(得分:1)
您的问题是您使用的是puts()
。 This个州
C库函数int puts(const char * str)将字符串写入stdout,但不包括空字符。换行符附加一个换行符。
因此,如果puts()
使用strlen()
,那么您的'\0'
会被'\n'
取代,这就是您的while循环无效的原因。