Chinaunix
标题:
关于NULL的问题
[打印本页]
作者:
hongshaohu
时间:
2012-06-20 09:07
标题:
关于NULL的问题
本帖最后由 hongshaohu 于 2012-06-20 09:08 编辑
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
void concatenate_str(char *str, ...);
int main(void) {
char str[50];
char *p = str;
for(int i = 0; i < 50; ++i) {
*p++ = 0;
}
concatenate_str(str, "The", " C ", "Programming", " Language");
printf("%s\n", str);
printf("%d\n", strlen(str));
printf("%c\n", str[25]);
printf("%d\n", str[26]);
printf("%d\n", str[27]);
return 0;
}
void concatenate_str(char *str, ...) {
va_list e;
va_start(e, str);
char *p;
while((p = va_arg(e, char*)) != NULL) {
printf("p=%s\n", p);
strcat(str, p);
}
va_end(e);
}
这个程序为什么在win7下执行printf("%d\n", strlen(str))时有错误?
如果在 concatenate_str(str, "The", " C ", "Programming", " Language")中的Language之后再加一个NULL参数就OK了。
不加NULL,打印出Language之后的字符 也是'\0',不清楚为什么程序执行strlen(str)就是不对?
作者:
pmerofc
时间:
2012-06-20 09:13
提示:
作者被禁止或删除 内容自动屏蔽
作者:
hongshaohu
时间:
2012-06-20 09:16
本帖最后由 hongshaohu 于 2012-06-20 09:26 编辑
回复
2#
pmerofc
嗯,理论上是的。不过我没加NULL,如果不执行strlen(str)则程序可以正常执行,而且str数组的元素已经被初始化为0了。为什么执行strlen(str)还有错误?
作者:
pmerofc
时间:
2012-06-20 09:36
提示:
作者被禁止或删除 内容自动屏蔽
作者:
dataxdata
时间:
2012-06-20 12:46
NULL和'\0'是不一样的,你还不如用
while(*(p = va_arg(e, char*)) != '\0')
来判断
作者:
blackuhlan
时间:
2012-06-20 15:44
#include <stdarg.h>
#define MAXARGS 100
/* execl is called by
[color=Red] execl(file, arg1, arg2, ..., (char *)0);[/color]
*/
execl(const char *file, const char *args, ...)
{
va_list ap;
char *array[MAXARGS];
int argno = 0;
va_start(ap, args);
if ((array[0] = args) != 0)
while ((array[argno++] = va_arg(ap, char *)) != 0)
;
va_end(ap);
return execv(file, array);
}
复制代码
HP的调用举例
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2