告诉我为什么会发生这种异常,或者更确切地说,指向字符数组的第二个字符的指针由于某种原因发生了变化?
00000000000A2390 00000000000A22D0 00000000000A2390 00000000000A2391
void InitStr(string1 *s, unsigned n){
*(s) = malloc((n+4) * sizeof(char));
*(s[0]) = (char)CHAR_MIN+(char)n;
*(s[1]) = (char)CHAR_MIN;
printf("%p %p\n",s[0],s[1]);
}
unsigned Length(string1 s){
printf("%p %p\n",&s[0],&s[1]);
}
奇怪的是它完全适合你……这就像你的家庭作业——找出你还有什么问题。
与此同时 -第一个功能
s[0]是什么?s[1]Ifs是指向 的指针的指针char,即 形象地说——一个指向字符串的指针。事实s[0]证明 - 一个指向为其分配内存的行的指针,s[1]- 一个指向下一行的指针 - 如果你有一个它们的数组。而在第二个 - 它只是字符串的第一个和第二个字符的地址。
现在,如果你调用了第一个函数
那么第一个和第二个函数中的结论会与你一致。