ZPS*_*ZPS 59 c arrays null char
检查字符数组是否为空的哪种方法最可靠?
char text[50];
if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)
要么
if(text[0] == '\0') {}
Run Code Online (Sandbox Code Playgroud)
或者我需要做什么
memset(text, 0, sizeof(text));
if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)
什么是最有效的方式来解决这个问题?
bbu*_*bum 74
鉴于此代码:
char text[50];
if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)
接下来是关于此代码的问题:
memset(text, 0, sizeof(text));
if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)
我闻到了混乱.具体来说,在这种情况下:
char text[50];
if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)
......内容text[]
将是未初始化和未定义的.因此,strlen(text)
将返回未定义的结果.
确保将C字符串初始化为空字符串的最简单/最快方法是将第一个字节设置为0.
char text[50];
text[0] = 0;
Run Code Online (Sandbox Code Playgroud)
从那时起,两者strlen(text)
和非常快速但不那么简单的(text[0] == 0)
测试都会检测到空字符串.
Par*_*ppa 19
取决于您的数组是否包含以null结尾的字符串.如果是的话,那么
if(text[0] == '\0') {}
Run Code Online (Sandbox Code Playgroud)
应该足够了.
编辑:另一种方法是......
if (strcmp(text, "") == 0)
Run Code Online (Sandbox Code Playgroud)
这可能效率较低,但明确表达了您的意图.
这将用于查找字符数组是否为空.它可能也是最快的.
if(text[0] == '\0') {}
Run Code Online (Sandbox Code Playgroud)
如果text
数组为空,这也会很快.如果它包含字符,则需要先计算其中的所有字符.
if(strlen(text) == 0) {}
Run Code Online (Sandbox Code Playgroud)