我需要回答这个问题来测试这个:
练习19-16:修复示例中的代码,以便在while循环运行之前保存样本变量的值,然后再恢复。在while循环执行完毕后,在代码中添加puts(sample)语句,以证明变量的原始地址已恢复。
**Example:**
#include <stdio.h>
int main()
{
char *sample = "From whence cometh my help?\n";
while(putchar(*sample++))
;
return(0);
}
我想检查一下我的答案是否正确,可能是您可以给出解释,因为我对指针和变量没有清楚的了解。 这是我的答案:
#include <stdio.h>
int main()
{
char *sample = "From whence cometh my help?\n"; //This is my string
char StringSample[31];
int index = 0;
while(sample[index] != '\0') //while the char is NOT equal to empty char (the last one)
{
index++; //increase the index by 1
StringSample[index] = sample[index]; //put the char "n" inside the stringSample //
putchar(*sample++); //write it to the screen
}
putchar('\n'); //A new line
//to put the entire string on screen again
for (index=0; index<60; index++)
{
putchar(StringSample[index]);
}
return(0);
}
这是我的输出:
我不知道为什么将字符串拆分为From whence co
以及为什么文本的其余部分(正如您所见)没有任何意义。
我正在使用Xcode 5.02
答案 0 :(得分:2)
问题是您尝试将sample
变量引用为索引以及指针。这会导致错误的结果。
while(sample[index] != '\0')
{
index++;
StringSample[index] = sample[index]; // indexed access
putchar(*sample++); // incrementing pointer sample.
}
您可以简单地实现目标
#include <stdio.h>
int main()
{
char *sample = "From whence cometh my help?\n";
char *ptr = sample; // Saving the value of sample
while(putchar(*sample++))
;
putchar('\n');
sample = ptr; // Restoring sample's value.
puts(sample);
return(0);
}
答案 1 :(得分:1)
char StringSample[31];
....
for (index=0; index<60; index++)
{
putchar(StringSample[index]);
}
你的阵列有31个单元,但是你可以远程迭代到60.上帝知道你可以访问什么。
答案 2 :(得分:1)
你使这种方式变得更加复杂。只需将指针保存在另一个变量中,并在完成后将其复制回来。
#include <stdio.h>
int main()
{
char *sample = "From whence cometh my help?\n";
char *temp = sample;
while(putchar(*sample++))
;
sample = temp;
puts(sample);
return(0);
}
输出:
From whence cometh my help?
From whence cometh my help?