三个指针的值,为什么会一一起改变,有什么办法可以不改变吗?
#include<stdio.h>char replaceblank(char s[]);
char replaceblank(char *s) {
char *ret = s;
char *rett = s;
int oldsize = 0;
int newsize = 0;
while (*ret!= '\0')
{
++oldsize;
if (*ret = ' ') {
newsize += 2;
}
else {
++newsize;
}
ret++;
}
printf("%d\n", oldsize);
printf("%d\n", newsize);
int indexofold = oldsize;
int indexofnew = newsize;
char *r;
rett = s + oldsize - 1;
r = s + newsize - 1;
while (rett!=r)
{
if (*rett == ' ')
{
*r-- = '0';
*r-- = '2';
*r-- = '%';
}
else {
*r--= *rett--;
}
}
return s;
}
void main() {
char s[] = "we are";
printf("%s\n", s);
printf("%s\n", replaceblank(s));
}
上面是我的程序,主要是s,rett,ret这三个指针变量的值,在执行下面这段程序前,值是 we re:
while (*ret!= '\0') {
++oldsize;
if (*ret = ' ') {
newsize += 2;
}
else {
++newsize;
}
ret++;
这个循环执行第一次后,三个值一起变成 e are;
求解答
这里由别人的另一段程序,他的指就不会改变:
#include <stdio.h> #include <assert.h>
char* replace(char* p)
{
char* ret = p;
char* q = p;
int num = 0;
int oldlen = 0;
int newlen = 0;
char* r;
assert(p != NULL);
while (*p != '\0')
{
if (*p == ' ')
{
num++;
}
oldlen++;
p++;
}
p = q;
newlen = oldlen + 2 * num;
q = p + oldlen - 1;
r = p + newlen - 1;
while (q != r)
{
if (*q == ' ')
{
*r-- = '0';
*r-- = '2';
*r-- = '%';
}
else
{
*r = *q;
r--;
}
q--;
}
return ret;
}
int main()
{
char p[20] = "we are happy.";
printf("原字符串是:%s\n", p);
printf("替换后的字符串是:%s %s\n", replace(p),p);
return 0;
}
*/
回答:
打开你的编译器警告或者提高你的编译器的警告等级,然后把警告基本改正,就不会出现这个问题了。。
回答:
请反复看下面这句话:
if (*ret = ' ') {
以上是 三个指针的值,为什么会一一起改变,有什么办法可以不改变吗? 的全部内容, 来源链接: utcz.com/p/195197.html