gpt4 book ai didi

c - 指针用++递增

转载 作者:行者123 更新时间:2023-11-30 15:31:08 28 4
gpt4 key购买 nike

我正在尝试温习我的 C,我有以下代码,当我使用 i 偏移量但不使用 Hold++ 时,它可以工作,我不明白为什么我认为他们做了同样的事情?这是我无法开始工作的版本:

char* reversestring2(char* s)
{
int mysize = strlen(s);
char* temp = s+mysize;
//I do +1 for the terminator
char* hold = (char*) malloc(mysize+1);

while(temp > s)
{
*(hold) = *--temp;
hold++;
}
*(hold++) = '\0';
//printf("pre cpy %s", hold);
strcpy(s,hold);
//printf("%s", hold);
return(s);
}

谢谢

char* reversestring(char* s)
{
int mysize = strlen(s);
char* temp = s+mysize;
char* hold = (char*) malloc(mysize+1);
int i=0;
while(temp > s)
{
*(hold+i) = *--temp;
//hold++;
i++;
}
*(hold+i) = '\0';
//printf("pre cpy %s", hold);
strcpy(s,hold);
//printf("%s", hold);
return(s);
}

int main()
{
//printf("%s\n", "you suck");
char test[100] = "you suck";
reversestring(test);
printf("%s\n", test);
//or
char* hold = (char*) malloc(100);
hold = reversestring(test);
if(hold == NULL)
printf("%s\n", "ERROR");
printf("Second run: %s\n", hold);
}

最佳答案

当您使用hold++时,指针hold前进到已分配数组的末尾。然后你这样做:

*(hold+i) = '\0';

它将一个值插入到已分配空间边界之外的内存中(例如,距离长度为 100 的数组开头 200 步),这会导致未定义的行为。然后这个:

strcpy(s,hold);

它将谁知道什么从不受控制的内存复制到字符串中。

关于c - 指针用++递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25090678/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com