如何检查char *是否为空?

时间:2018-06-01 13:46:57

标签: c string pointers char

如何检查char *name是否为空?

#include <stdio.h>
#include <string.h>

void store_stuff(char **name, int *age);
int main(void) {

    char *name;
    int age;

    store_stuff(&name, &age);

    printf("Name: %s\n", name);
    printf("Age: %d\n", age);

}

void store_stuff(char **name, int *age) {

    *age = 31;

    if (name == NULL) { // how can I check here if char name is empty?
        *name = "ERROR";
    }

}

4 个答案:

答案 0 :(得分:7)

指针不是空的&#34;,它们指向有效数据或无效数据。使它们指向无效数据的受控方式是将它们分配给NULL。因此,编写程序的正确方法是:

char *name = NULL;
int age;
store_stuff(&name, &age);

...

void store_stuff(char **name, int *age) {
  if(*name == NULL)
  {
    // handle error
  }
  ...
}

答案 1 :(得分:1)

如何检查char *name是否为空? name未在main()函数中初始化,首先将NULL分配给{{ 1}}喜欢

name

案例1:

char *name =  NULL; /* now its initialized */

然后将int main(void) { char *name = NULL; store_stuff(&name, &age); /* code */ return 0; } 中的*name内容检查为

store_stuff()

案例2:如果void store_stuff(char **name, int *age) { if (*name == NULL) { /* since name is double ptr here, *name means NULL in the main() if it is */ /* error handling */ } } name函数中保存char *name = "Zoey";之类的数据,则

main()

然后低于条件将不会真实&amp;我希望这就是你想要的东西

int main(void) {
    char *name = "Zoey" ;
    store_stuff(&name, &age);
    /* code */
    return 0;
}

答案 2 :(得分:1)

你的问题似乎很清楚,但是用它显示的代码不那么简单:

if (name == NULL) { // how can I check here if char name is empty?
    *name = "ERROR";
}

这是未定义的行为。 如果<{strong> name确实是NULL,则您无法取消引用它,但这就是您在下一行中所做的事情。

当然,你调用这个函数的方式,它永远不会发生。你这样称呼它:

store_stuff(&name, &age);

并且&运算符始终求值为有效的非NULL指针。

一般来说,它不清楚你的意思是什么&#34;空&#34;。指针的特殊值NULL表示&#34;此指针不指向任何&#34;。但这并不意味着&#34;空&#34;,它仍然有一个价值:NULL

strings 的上下文中,empty将具有明确定义的含义。由于C中的字符串被定义为以\0字节结尾的字符序列,因此 empty 字符串将\0作为第一个字符。因此,假设char *str是一个字符串,您可以检查一个空字符串,如

if (*str == 0)

甚至更短:

if (!*str)

请注意,如果strNULL(并未指向任何字符串),则会导致未定义的行为。如果您对此一无所知并且必须检查它确实指向一个字符串并且该字符串是非空的,您可以编写类似

的内容
if (!str || !*str)

大致相当于.NET字符串上的IsNullOrEmpty()方法...

答案 3 :(得分:0)

如下:

if (*name == NULL) {/*your code*/}

确保char *name=NULL