【发布时间】:2015-04-08 04:46:50
【问题描述】:
我有一个C语言的sn-p代码,如下图:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char *s="Abhas";
printf(" s = %s \n", s);
printf(" s + s[1] = %s \n", s+s[1]);
printf(" s + s[1] - s[3]= %s \n", s+s[1]-s[3]);
return 0;
}
输出是:
那么,您能否帮我澄清一下我们如何获得第二个和最后一个输出行。我是 C 的新人。
【问题讨论】:
-
你期待什么结果?
-
倒数第二个 printf 由于缓冲区溢出导致未定义的行为,从this answer的第二部分了解一下
-
其实,我需要解释一下 sn-p 代码是如何工作的,以及为什么我会得到输出。
-
@GrijeshChauhan:我想是的。 s + s[1] = s + 'a' = s + 62 => 错误,因为字符串只有 5 个字符。
-
@PhucNguyen in
s + s[1], ..s[1]是'b',其 ascii 值为 98(假设 ascii 实现)和s + s[1]==s + 98运行时错误