v v2 不是,但它们完全相同。
char *v;
v = (char *) malloc(1);
fread(v,i,1,stdin);
printf("%s",v);
打印:
a=aaa&b=ooo%3C%2Ftest%3Eooo
v2 与 v
相同char *v2 = "a=aaa&b=ooo%3C%2Ftest%3Eooo"
让我们尝试 PARSE 来自“ v ”的“ b = ”之后的内容
const char *PATTERN1 = "b=";
const char *PATTERN2 = "&";
char *END = NULL;
char *START = strstr(v, PATTERN1);
if (START) {
START = START + strlen(PATTERN1);
char * END = strstr(START, PATTERN2);
if (!END){
ENDm = START + strlen(START);
}
TARGET = malloc(END - START + 1);
memcpy(TARGET, START, END - START);
TARGET[END - START] = '\0';
}
printf("--%s--",TARGET);
结果:
--abc%3C%2Ftest%!--
它最终缺少一些东西。 (还有一个额外的“!”)
现在让我们在“ v2 ”
上使用相同的代码--abc%3C%2Ftest%3Eabc--
这次没有什么遗漏
答案 0 :(得分:5)
您不能将字符串存储在1个字符的数组中。您可以存储的唯一字符串是""
(空字符串),因为'\0'
终结符只需要一个字符。
您的代码存在未定义的行为,因此无法在此之外进行推理。