我有一个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);
}
感谢您的帮助
答案 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()
的返回值 msg
。 scanf()
完全可能失败,然后您无法依赖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)
第一种方法:
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/
答案 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);
}
`