- 论坛徽章:
- 0
|
本帖最后由 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)就是不对?
|
|