如何检查C中的String是否为空

时间:2014-10-28 13:19:01

标签: c string if-statement printf

我有一个void函数,它从全局变量中获取字符串并打印它们。

问题是即使字符串是empy,void函数也会打印一条消息/做东西。 因此,如果全局变量为empt,则只打印“message is:” 如果字符串有字符,我只想做点什么。

我想要做的是检查字符串是否为空,然后打印一条消息。

// global variable

char msg[30];
scanf("%s", &msg);

void timer(void) {
    //i want to only print if there is a message
    printf("message: %s", msg);
}

感谢您的帮助

7 个答案:

答案 0 :(得分:13)

这样做的简单方法就是这样:

if (msg[0])
    printf("message: %s", msg);

如果稍后某个日期msg是指针,您首先要确保它不是NULL指针。

if (msg && msg[0])
    printf("message: %s", msg);

用于演示的测试程序:

#include <stdio.h>
#include <stdlib.h>

char *msg;

void test() {
    if (msg && msg[0])
        printf("string is %s\n", msg);
}

int main()
{
    msg = NULL;
    test();
    msg = calloc(10, 1);
    test();
    msg[0] = 'm';
    msg[1] = 'e';
    test();
    free(msg);
}

在我的机器上输出为:

  

string is me

答案 1 :(得分:7)

C中的字符串表示为字符数组,由值为零的字符(通常写为'\0')终止。字符串的长度是零之前的字符数。

因此,如果数组中的第一个字符为零,则字符串为空,因为根据定义, no 字符位于零之前。

可以这样检查:

if(msg[0] != '\0')
{
  /* string isn't empty! */
}

这是非常明确的代码,较短的if(msg[0])if(*msg)具有完全相同的语义,但可能稍微难以阅读。这主要是个人风格的问题。

请注意,在您的情况下,当您使用scanf()阅读msg时,您应该在检查内容之前检查来自scanf()返回值 msgscanf()完全可能失败,然后您无法依赖msg设置为空字符串。

答案 2 :(得分:3)

这应该适合你:

只有在消息长于0时才会打印消息。

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

void timer() {

    char msg[30];
    scanf(" %s", msg);

    if(strlen(msg) != 0)
        printf("message: %s", msg);
}

int main() {

    timer();

    return 0; 
}

答案 3 :(得分:0)

以下是我找到(并且可以想到)检查字符串是否为空的所有方法。按效率排序。

  • msg[0] == '\0'
  • strlen(msg) == 0
  • !strcmp(msg, "")

而且,这应该只在用户以某种方式避免输入时发生(例如,使用 Ctrl + Z )或者出现错误

  • scanf("%s", &msg) <= 0

答案 4 :(得分:0)

我认为一种快速简便的解决方案是在strlen()中使用string.h来检查字符串的长度。如果为0,则为空。

例如

// Check string is NOT empty.
if (strlen(current_word) > 0)
            {
                printf("%s %lu", current_word, strlen(current_word));
                strcpy(current_word, "");
                print_line();
            }

答案 5 :(得分:0)

  1. 使用Strlen()函数。
  2. 使用strcmp()与NULL字符串进行比较
  3. 检查第一个字符等于'\ 0'。
  4. 如果使用scanf输入字符串,则检查scanf()函数的返回值

第一种方法:

char msg[30];

scanf("%s", &msg);

void timer(void) {

if(strlen(msg)>0)

printf("message: %s", msg);

}

第二种方法:

char msg[30];

scanf("%s", &msg);

void timer(void) {

if(strcmp(msg,"")!=0)

printf("message: %s", msg);

}

第三种方法:

char msg[30];

scanf("%s", &msg);

void timer(void) {

if(msg[0]!='\0')

printf("message: %s", msg);

}

第四种方法:

char msg[30];

int rv=scanf("%s", &msg);

void timer(void) {

if(rv>0)

printf("message: %s", msg);

}

供您参考有关c字符串

https://www.programiz.com/c-programming/c-strings

https://www.geeksforgeeks.org/strings-in-c-2/

https://scholarsoul.com/string-in-c/

https://www.guru99.com/c-strings.html

答案 6 :(得分:-1)

好的,你可以试试这个:

char msg[30];
scanf("%s",&msg);

void timer(void)
{
    //i want to only print if there is a message
    if(!msg.length == 0 )
        printf("message: %s", msg);
}

`