在单个printf调用中从argv字符串打印ascii值

时间:2012-09-16 15:32:05

标签: c argv

我想从argv收到的字符串中打印所有字符的ascii值,只使用一次printf调用。

这样的东西,但只打印有效的字符(!= 0):

printf (" string is %s , in ascii = 0x%X %X %X %X", argv[1], 
          argv[1][0], argv[1][1], argv[1][2], argv[1][3]);

我不想使用for循环,从0到strlen(argv [1])。我只需要打一个打印电话。

如果argv [1] =“a”,那么我只想打印:string是a,ascii = 0x61

如果argv [1] =“ab”,那么我只想打印:string是ab,ascii = 0x61 62

问题是我不想打印垃圾数据

1 个答案:

答案 0 :(得分:5)

如果没有循环,你就无法做到这一点。 printf只会查找堆栈中的某个深度,并始终打印一定数量的值。你不能让它寻找可变数量的值,所以循环是你最好的选择:

char *ptr = argv[1];
while (ptr) printf("%X ", *ptr++);

(从技术上讲,这是一个while循环,而不是for循环。