char pwdToTest[4]=”字符;“ABCD”;;如何在C中检测字符串的结尾?

char pwdToTest[4]=”字符;“ABCD”;;如何在C中检测字符串的结尾?,c,arrays,string,initialization,C,Arrays,String,Initialization,我试图掌握字符数组来执行“字符串”操作,但我无法理解这种行为。我基本上是在尝试实现strlen函数 本质上,问题在于如果我分配: char pwdToTest[4] = "ABCD"; 然后我尝试遍历每个字符以查找'\0',我刚刚意识到结尾没有'\0',而是第五个内存位置中的任何内容(可能是'\0\或以前测试中的其他内容),因此我无法检测“字符串”的结尾 但这解决了问题: char pwdToTest[5] = "ABCD\0"; 创建“字符串”并分配值以便在strlen或我自己的strle

我试图掌握字符数组来执行“字符串”操作,但我无法理解这种行为。我基本上是在尝试实现strlen函数

本质上,问题在于如果我分配:

char pwdToTest[4] = "ABCD";
然后我尝试遍历每个字符以查找'\0',我刚刚意识到结尾没有'\0',而是第五个内存位置中的任何内容(可能是'\0\或以前测试中的其他内容),因此我无法检测“字符串”的结尾

但这解决了问题:

char pwdToTest[5] = "ABCD\0";
创建“字符串”并分配值以便在strlen或我自己的strlen实现中使用的正确方法是什么

我的实施方案供参考:

int calLenCharArr(char *charArray)
{
    int i = 0;            
    while (charArray[i] != '\0')
    {
        printf("%c      %i\n",charArray[i],charArray[i]);
        i++;
    }        
    printf("lenth: %i", i);

    return i;
} 
C字符串是以null结尾的字符数组。除非
char
数组以null结尾,否则根据定义,不能调用is字符串

引用第§7.1.1章中的
C11

字符串是以第一个null结尾并包含第一个null的连续字符序列 性格[……]

所以,当你说

 char pwdToTest[4] = "ABCD";
您没有存储空终止符的任何位置

最好的方法是保留数组的大小,并使用所需的字符串文本初始化它

char pwdToTest[ ] = "ABCD";
它自动分配空间,包括终止的空字符

相关,第§6.7.9章,(重点)

字符类型的数组可以由字符串文字或UTF初始化−8串 文字,可以选择用大括号括起来。字符串文本(的连续字节,包括 如果有空间或数组大小未知,则终止空字符)初始化 数组的元素

现在,
pwdToTest
有资格作为字符串调用,所有与字符串相关的函数都可以使用它。

C字符串是以空结尾的字符数组。除非
char
数组以null结尾,否则根据定义,不能调用is字符串

引用第§7.1.1章中的
C11

字符串是以第一个null结尾并包含第一个null的连续字符序列 性格[……]

所以,当你说

 char pwdToTest[4] = "ABCD";
您没有存储空终止符的任何位置

最好的方法是保留数组的大小,并使用所需的字符串文本初始化它

char pwdToTest[ ] = "ABCD";
它自动分配空间,包括终止的空字符

相关,第§6.7.9章,(重点)

字符类型的数组可以由字符串文字或UTF初始化−8串 文字,可以选择用大括号括起来。字符串文本(的连续字节,包括 如果有空间或数组大小未知,则终止空字符)初始化 数组的元素


现在,
pwdToTest
可以作为字符串调用,所有与字符串相关的函数都可以使用它。

否,
char pwdToTest[5]=“ABCD”-为您添加了
'\0'
。字符串文字的末尾已经有一个隐式的
\0
。但您不复制它,因为您将数组大小限制为4。不要指定一个大小,让它从文字中推导出来:
char pwdToTest[]=“ABCD”-已为您设置大小(包括
\0
)。感谢您的快速回答!!我现在明白了,即使C试图为我添加\0,如果我限制数组的空间,它也无法这样做:-)不,
char pwdToTest[5]=“ABCD”-为您添加了
'\0'
。字符串文字的末尾已经有一个隐式的
\0
。但您不复制它,因为您将数组大小限制为4。不要指定一个大小,让它从文字中推导出来:
char pwdToTest[]=“ABCD”-已为您设置大小(包括
\0
)。感谢您的快速回答!!我现在明白了,即使C试图为我添加\0,如果我限制数组的空间,它也无法做到:-)谢谢您的详细回答!!非常有帮助。谢谢你的详细回答!!真的很有帮助。