相同的字串。一个是行为不端

时间:2017-06-22 08:27:43

标签: c

从stdin中读取

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--

这次没有什么遗漏

1 个答案:

答案 0 :(得分:5)

您不能将字符串存储在1个字符的数组中。您可以存储的唯一字符串是""(空字符串),因为'\0'终结符只需要一个字符。

您的代码存在未定义的行为,因此无法在此之外进行推理。