为什么在第二个字符串中打印空字符?
声明字符数组应该在结尾处自动添加空字符。这取决于编译器吗?
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool ChckStrng(char *str);
void main()
{
char a[] = "hello";
char b[] = "abc";
printf("a:%d\n", ChckStrng(a));
printf("b:%d\n", ChckStrng(b));
}
bool ChckStrng(char *str)
{
int count[26];
while(str != NULL)
{
printf(":%d:\n", *str - 'a');
if(++count[*str - 'a'] > 1)
return false;
str = str + 1;
}
printf("end\n");
return true;
}
输出1:
:7: :4: :11: :11: A:0
0: :1: :2: :-97: :-97: B:0
答案 0 :(得分:5)
您在这里比较指针,换句话说,如果str
设置为NULL
:
while(str != NULL) /* str holds the address of a char */
您需要将字符与空终止符进行比较,换句话说,检查字符str
指向是否为空终止符:< / p>
while(*str != '\0')
答案 1 :(得分:3)
您正在比较指针本身的值而不是值指针指向的值。
while( *str != '\0' )
{
没有区别:*str
和\0
,这是一个空字符。
NULL
是空指针,不是空字符。
答案 2 :(得分:3)
str是一个保存地址的指针* str保存值
bool ChckStrng(char *str)
{
int count[26];
while(*str != '\0')
{
printf(":%d:\n", *str - 'a');
if(++count[*str - 'a'] > 1)
return false;
str = str + 1;
}
printf("end\n");
return true;
}
答案 3 :(得分:1)
指针与字符不同。在&#39; C&#39;字符数组的空终止由ascii值0或NUL
表示