【发布时间】:2018-05-02 18:22:23
【问题描述】:
我正在尝试反转字符串中的单词,并且我相信我已经编写了正确的逻辑,但是在调试时我开始知道我放入 new_array char 指针变量的值丢失了?而且我似乎不知道为什么?
你能告诉我我犯了什么错误以及可以做些什么来纠正它吗?
#include <stdio.h>
void reverse_words(char *arr, int size) {
char *ptr = arr;
char *new_array = (char*)malloc(sizeof(char*) * size);
while (*ptr != '\0') {
ptr++;
}
ptr--;
for (int i = size - 1; i >= 0; i--) {
if (*ptr != ' ') {
ptr--;
} else {
char *temp = ptr;
temp++;
//
// Problem is in this block new_array value is lost when i increment it
while (*temp != ' ' && *temp != '\0') {
*new_array = *temp;
new_array++;
temp++;
}
if (i != 0) {
*new_array = *ptr;
ptr--;
}
}
}
*new_array = '\0';
strcpy(arr, new_array);
return;
}
int main() {
char arr[] = "My job is coding";
int size = sizeof(arr);
reverse_words(arr, size);
printf("%s", arr);
return 0;
}
【问题讨论】:
-
“丢失”是什么意思?
-
值不存在,我使用 *temp;
-
@user3405439 当循环失败时不要执行 new_array++ bcz new_array 指向 NULL 并且您正在将 NULL 复制到 arr
-
递增
new_array的代码会更改其值。这就是递增的作用。在以后的代码中,您不能指望new_array会神奇地恢复到其原始值。顺便说一句:如果您要做的只是将字符串反转到位,则不需要malloc()调用。 -
注意:您不需要分配字符串的副本。您可以就地反转,只交换字符。
标签: c arrays string algorithm pointers