如何检查C字符串是否为空

我正在用C写一个非常小的程序,需要检查某个字符串是否为空。 为了这个问题,我简化了代码:

#include

#include

int main() {

char url[63] = {'\0'};

do {

printf("Enter a URL: ");

scanf("%s", url);

printf("%s", url);

} while (/*what should I put in here?*/);

return(0);

}

我希望该程序停止循环,如果用户只是按Enter键而不输入任何内容。

codedude asked 2020-06-24T16:10:33Z

11个解决方案

55 votes

由于C样式字符串始终以空字符(strcmp)终止,因此您可以通过以下方式检查字符串是否为空:

do {

...

} while (url[0] != '\0');

或者,您可以使用strcmp函数,该函数虽然过大,但可能更易于阅读:

do {

...

} while (strcmp(url, ""));

请注意,如果字符串不同,则strcmp返回一个非零值,如果字符串相同,则返回0,因此此循环继续循环直到字符串为非空。

希望这可以帮助!

templatetypedef answered 2020-06-24T16:10:55Z

15 votes

如果要检查字符串是否为空:

if (str[0] == '\0')

{

// your code here

}

nabroyan answered 2020-06-24T16:11:15Z

7 votes

如果第一个字符恰巧是'\0',则您有一个空字符串。

这是您应该做的:

do {

/*

* Resetting first character before getting input.

*/

url[0] = '\0';

// code

} while (url[0] != '\0');

Mohamad Ali Baydoun answered 2020-06-24T16:11:40Z

4 votes

通常来说,考虑到-1会忽略空格(空格,制表符,换行符),您将很难在这里得到一个空字符串...但是无论如何,-1实际上会返回成功匹配的次数...

从手册页:

成功匹配和分配的输入项的数量,该数量可以少于提供的数量,如果早期匹配失败,则为零。

因此,如果他们设法通过空字符串(例如-1)来解决问题,则只需检查返回结果即可。

int count = 0;

do {

...

count = scanf("%62s", url); // You should check return values and limit the

// input length

...

} while (count <= 0)

请注意,您必须进行的检查不多,因为在我给出的示例中,您会得到-1的信息,该信息再次在手册页中进行了详细介绍:

如果在第一次成功转换或匹配失败发生之前达到输入结束,则返回EOF值。 如果发生读取错误,也会返回EOF,在这种情况下,将设置流的错误指示符(请参见ferror(3)),并且设置errno表示错误。

Mike answered 2020-06-24T16:12:23Z

3 votes

您可以检查scanf的返回值。此代码将一直位于该位置,直到接收到字符串为止。

int a;

do {

// other code

a = scanf("%s", url);

} while (a <= 0);

squiguy answered 2020-06-24T16:12:43Z

2 votes

strlen(url)

返回字符串的长度。 它计算所有字符,直到找到一个空字节。 您的情况下,请对照0进行检查。

或仅通过以下方式手动检查:

*url == '\0'

flyingOwl answered 2020-06-24T16:13:11Z

2 votes

您可以尝试这样:-

if (string[0] == '\0') {

}

在您的情况下,它可能像:

do {

...

} while (url[0] != '\0')

;

Rahul Tripathi answered 2020-06-24T16:13:40Z

2 votes

首先用fgets()替换scanf() ...

do {

if (!fgets(url, sizeof url, stdin)) /* error */;

/* ... */

} while (*url != '\n');

pmg answered 2020-06-24T16:14:00Z

1 votes

最简单的方法是:

do {

// Something

} while (*url);

基本上,*url将在数组的第一个位置返回char; 由于C字符串以空值结尾,因此如果字符串为空,则其第一个位置为字符'\0',其ASCII值为0; 由于C逻辑语句将每个零值都视为false,因此当字符串的第一个位置为非空(即字符串不为空)时,此循环将继续进行。

推荐阅读,如果您想更好地理解这一点:

C字串:[https://www.tutorialspoint.com/cprogramming/c_strings.htm]

C阵列:[https://www.tutorialspoint.com/cprogramming/c_arrays.htm]

数组和指针之间的关系:[https://www.programiz.com/c-programming/c-pointers-arrays]

逻辑运算符:[https://www.tutorialspoint.com/cprogramming/c_logical_operators.htm]

Haroldo_OK answered 2020-06-24T16:14:46Z

0 votes

我写下了这个宏

#define IS_EMPTY_STR(X) ( (1 / (sizeof(X[0]) == 1))/*type check*/ && !(X[0])/*content check*/)

所以会是

while (! IS_EMPTY_STR(url));

此宏的好处在于它是类型安全的。 如果将其他内容放入char指针之外,则会出现编译错误。

user1537765 answered 2020-06-24T16:15:15Z

-1 votes

使用strtok(),只需一行即可完成:“ if(strtok(s,“ \ t”)== NULL)“。例如:

#include

#include

int is_whitespace(char *s) {

if (strtok(s," \t")==NULL) {

return 1;

} else {

return 0;

}

}

void demo(void) {

char s1[128];

char s2[128];

strcpy(s1," abc \t ");

strcpy(s2," \t ");

printf("s1 = \"%s\"\n", s1);

printf("s2 = \"%s\"\n", s2);

printf("is_whitespace(s1)=%d\n",is_whitespace(s1));

printf("is_whitespace(s2)=%d\n",is_whitespace(s2));

}

int main() {

char url[63] = {'\0'};

do {

printf("Enter a URL: ");

scanf("%s", url);

printf("url='%s'\n", url);

} while (is_whitespace(url));

return 0;

}

nathanielng answered 2020-06-24T16:15:35Z

用c语言判断字符串为空,如何检查C字符串是否为空相关推荐

  1. R语言str_starts函数和str_ends函数检查在字符串的开头或者结尾是否存在特定字符串或者字符串模式

    R语言str_starts函数和str_ends函数检查在字符串的开头或者结尾是否存在特定字符串或者字符串模式 目录

  2. 游戏服务器为空请检查列表,游戏服务器为空请检查列表文件

    游戏服务器为空请检查列表文件 内容精选 换一换 如果请求因错误导致未被处理,则会返回一条错误响应.错误响应中包括错误码和具体错误描述.表1列出了错误响应中的常见错误码. 本接口用于制作私有镜像,支持: ...

  3. c语言判断全角和半角字符,对于字符串中全角字符和半角字符的判断

    先拿空格来说: public class Test { private  String regex = "^[//u0020//u3000]*$"; public boolean ...

  4. java检查两个字符串是否包含,java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含...

    java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含 要检查一个字符串是否包含另外一个字符串需要使用indexOf()方法,如果indexOf方法返回大于等于0的值 ...

  5. C语言判断字符串为空

    一般而言,我们习惯用一个字符数组用来存储一个字符串. char str_array[LEN]; 或者malloc一段内存来存储一个字符串 char * str_ptr = (char*) malloc ...

  6. C语言判断回文字符串

    C语言判断回文字符串 #include<stdio.h> char *huiwen(char *str){int i, j,t=0;for(i = 0,j = strlen(str) - ...

  7. c语言九三字符串的字母个数,C语言判断闰年和平年

    C语言判断闰年和平年 #includevoid fun(int year) { if((year%4==0&&year%100!=0)||(year%100==0&&y ...

  8. C语言判断字符串是否为回文

    C语言判断字符串是否为回文 回文就是字符串中心对称,如"abcba"."abccba"是回文,"abcdba"不是回文. /*判断字符串是否 ...

  9. c语言判断文件为空,javascript如何判断文件是否为空?

    JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...

  10. java怎么判断string数组是否为空_java技术校验字符串、数组是否为空、空字符串...

    java开发中你经常会遇到的是字符串为空而抛出异常,这时候你就会想到如果有一个工具类可以校验一下如果是空或者是空字符串.我则跳过去不走这个方法或者返回错误信息.下面给大家分享校验空值.空字符串的几个方 ...

最新文章

  1. C# 发送Http请求 - WebClient类
  2. Nhibernate使用动态Expression的问题解决
  3. python图像识别车票_是程序员就用Python查12306的票
  4. centos 7.0 ln命令 和chkconfig 命令介绍 开机自动启 服务
  5. 弹窗要打开或保存来自_如何让 PopClip 支持印象笔记客户端:保存到印象笔记amp;高亮文字...
  6. 计算机怎么取消u盘启动程序,计算机设置U盘自动启动程序| U盘自动播放设置
  7. C#WinForm 窗体单例模式 反射单例
  8. 对架构师认识的误区有哪些?
  9. 在Mac上如何更轻松的使用表情符号管理器
  10. 蚂蚁金服 CEO 突然辞职!去向很意外。。。
  11. VS2015卸载经过
  12. 王超(清华大学博士)Linux期末考核
  13. hdu6184 Counting Stars(三元环统计)
  14. Laravel 消息通知使用 EasySms 短信包插件
  15. python是什么意思中文、好学吗-零基础学python难吗?好学吗?
  16. NOIP 2015 D1 T2 信息传递
  17. SRAM与SDRAM的比较
  18. 树莓派u盘启动并扩容
  19. padding有两种设置方式:
  20. sql server 计算2个日期相差的 天数,月数,年数,日期运算/计算

热门文章

  1. word2010以上版本中快捷录入数学公式的方法(二)
  2. 雷霄骅《视音频数据处理入门:H.264视频码流解析》(代码注释版)
  3. 循环switch 变量x 如果case a 车辆型号查询系统官网,车辆型号怎么去查询?
  4. 听写英语单词的小程序
  5. 全国高级计算机职称考试试题及答案,全国职称计算机考试复习题「附答案」
  6. 单片机交通灯c语言实验报告,模拟交通灯单片机实验报告.doc
  7. 企业权限管理系统如何配置?深度解析永洪BI权限管理系统
  8. RecyclerView、Adapter、ViewHolder的关系
  9. linux caffe 生成lmdb,Caffe︱构建lmdb数据集与各类文件路径名设置细解
  10. python设计程序界面_python图形界面(GUI)设计