|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
不调用会报段错误,问题应该出在 myprintf() 函数中,其余函数单独调试没有问题,为节约阅读量不打出来了
- #include <stdio.h>
- #include <stdarg.h>
- #include <string.h>
- int myprintf(char* str, ...) //目标是模仿printf的%c, %d, %s功能
- {
- va_list vap;
- int count=0, i=0;
- int darg;
- char carg, *sarg;
- va_start(vap, str);
- while (str[i] != '\0') //读 " " 内的字符串,遇到\0结束
- {
- if (str[i] == '%') //遇到占位符时
- {
- if (str[i+1] == 'd')
- {
- darg = va_arg(vap, int);
- count += print_int(darg);
- }
- if (str[i+1] == 'c')
- {
- carg = va_arg(vap, int);
- putchar(carg);
- count += 1;
- }
- if (str[i+1] == 's')
- {
- sarg = va_arg(vap, char*);
- count += print_str(sarg);
- }
- i ++; //角标移动到占位符后两位
- }
- else
- {
- putchar(str[i]);
- count += 1;
- }
- i++;
- }
- va_end(vap);
- return count;
- }
- int main(void)
- {
- int i;
- i = myprintf("Hello %s\n", "FishC");
- myprintf("共打印了 %d 个字符(包含\\n)\n", i);
- i = myprintf("int: %d, char: %c\n", -520, 'H');
- myprintf("共打印了 %d 个字符(包含\\n)\n", i);
- return 0;
- }
复制代码
是 stdarg.h 中的操作,需要用到 string.h咩,求大佬答疑解惑,感谢~!
你现有代码,没有要用到string.h的函数。
#include <string.h>删除然后编译不就一目了然了。
|
|