Char指针值在循环中变化,但不在之后变化

时间:2016-10-15 13:42:16

标签: c string pointers

我目前对执行基本c程序以反转字符串感到困惑。我用指针。请记住,我的程序绝对不是最有效的,我只想实验指针。 我遇到的问题如下:

// initialize variables
char *sentence = malloc(256);
char *answer = malloc(256);

// ask user for input
printf("please enter sentence\n");
scanf("%s", sentence);

// loop to reverse the "sentence" string
    for (int index = count; index >=0; index--) // count has been determined as the length of the string "sentence" previously
{
    reversed = &sentence[index]; // pointer reversed points to last location of pointer sentence
    printf("\n ** %c", *reversed);
    reversed++; // incremend reversed by 1
}
printf("\n%s", reversed); // prints the cahr pointer reversed as string

Console result 如果你无法打开图像,我得到的是循环中printf中以相反顺序打印的所有字符。然而,最终的printf给出了一个奇怪的结果:(如果我的句子是bonjour)\ n ** r **你 ** o ** j ** ** o ** b 。
onjour< - 这是我不明白的。

感谢您的帮助,非常感谢。

2 个答案:

答案 0 :(得分:2)

反向打印字符串的代码不会将结果存储在答案中。您需要首先将reversed指向answer,然后在循环中向其添加字符时执行此操作:

char *reversed = answer;
for (int index = count; index >=0; index--) {
    *reversed = sentence[index];
    printf("\n ** %c", *reversed);
    reversed++;
}
*reversed = '\0';
printf("\n%s", answer);

答案 1 :(得分:-1)

reversed = &sentence[index];  

我认为那是错的。

reversed = sentence[index]; 

是对的。无论如何,代码到处乱七八糟。