2009-12-06 42 views

回答

6

由于%s格式说明告诉printf该参数是一个空终止字符串。您给printf一个字符 - argv数组第二个元素中的第四个字符。

如果你想打印从第四个字符的字符串末尾的子串,你可以做到这一点,你只需要得到一个指向该角色:

printf("%s\n", &argv[1][3]); 

,或者,如果你喜欢:

printf("%s\n", argv[1] + 3); 
+0

但它是一个空终止的字符串,我只是希望它从偏移量3开始,并保持打印直到空。 那么我将如何实现同样的目标呢? – Fred 2009-12-06 07:04:22

+0

谢谢,我刚刚看到你添加了一些信息给你的评论。 – Fred 2009-12-06 07:05:39

2

“%s”表示一个foramt字符串需要一个“字符*”的说法,但你传递一个“字符”等你拿垃圾(可能是崩溃)。格式化字符串中的“%c”需要一个'char'参数,这就是你所给的,所以它的工作原理。

+0

不太可能发生崩溃而不是编译器错误。 GCC(至少)可以对格式化字符串函数进行类型检查,比如'printf'和'scanf'。 – 2010-02-17 21:41:44