0

我想打印从 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]);

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

如果 argv[1] = "a",那么我只想打印:string is a , in ascii = 0x61

如果 argv[1] = "ab",那么我只想打印:string is ab, in ascii = 0x61 62

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

4

1 回答 1

5

没有循环就无法做到这一点。printf只会在堆栈中寻找一定的深度,并且总是会打印一定数量的值。您不能让它查找可变数量的值,因此循环是您的最佳选择:

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

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

于 2012-09-16T15:40:33.807 回答