c - 如何在 C 中打印/检测空值
问题描述
我有以下函数,我试图传递 aNULL
来模拟“可选”参数:
char * slice2(const char * str, const unsigned int * start, const unsigned int * end) {
size_t string_len = strlen(str);
printf("Start: %d | End: %d\n", *start, *end);
if (*start == NULL) inferred_start = 0;
if (*end == NULL) inferred_end = string_len;
// more code and such
}
并称为:
unsigned int start = 6;
printf("'%s' ==> %s\n", "String", slice2("String", &start, NULL));
执行上述操作的正确方法是什么?
解决方案
start
是一个指向 an 的指针unsigned int
,所以*start
an 是unsigned int
一个整数。
您的测试if (*start == NULL)
试图将整数值与空指针常量进行比较。
不幸的是,它可以毫无错误地编译,因为NULL
在法律上可以简单地定义为0
. 但是要测试是否start
是空指针,请使用
if (start == NULL) ...
同样对于end
.
另外,这一行:
printf("Start: %d | End: %d\n", *start, *end);
只有在您确认既不是空指针start
也不是空指针后才应执行end
。
推荐阅读
- vb.net - Publish 上的 VB.NET 变量初始化问题
- amazon-web-services - 共享 AWS 密钥可以吗?
- ios - 在不同的 iphone 模拟器上构建时,iOS 应用程序的布局会迷失方向
- java - 使用 maven 程序集插件而不是 spring boot maven 插件时,如何让 spring-boot 控制器工作?
- node.js - 无法 POST /admin 在 Web 浏览器中返回错误
- cucumber - 如何检查文件类型中的特定字符串
- c++ - *(&arr + 1) - arr 如何提供数组大小
- linux - TCP 写操作(在非阻塞模式下)有时会阻塞超过几毫秒
- java - Java 中的 Bouncy Castle 加密 .Net 中的解密
- express - NextJs 自定义 Express 服务器无法正常工作