到底是哪里出了问题呢,执行到将a复制到b这一步后面的就不打印了,但是编译器并没...
#include<stdio.h>int main()
{
void copy_string(char *from, char *to);
char *a = "I am a taecher";
char *b = "I am a stduent";
printf("string a =%s\n", a);
printf("string b =%s\n", b);
printf("将a复制到b\n");
copy_string(a,b);
printf("string a =%s\n", a);
printf("string b =%s\n", b);
return 0;
}
void copy_string(char *from, char *to)
{
while((*to++=*from++)!='\0')
;
}
到底是哪里出了问题呢,执行到将a复制到b这一步后面的就不打印了,但是编译器并没有报错呀 本帖最后由 baige 于 2020-9-2 11:25 编辑
字符指针变量指向的字符串常量中的内容是不能修改(不能对它在赋值)
#include<stdio.h>
int main()
{
void copy_string(char *from, char *to);
char a[] = "I am a taecher";
char b[] = "I am a stduent";
printf("string a =%s\n", a);
printf("string b =%s\n", b);
printf("将a复制到b\n");
copy_string(a,b);
printf("string a =%s\n", a);
printf("string b =%s\n", b);
return 0;
}
void copy_string(char *from, char *to)
{
while((*to++=*from++)!='\0')
;
}
#include<stdio.h>
int main()
{
void copy_string(char *from, char *to);
char *a = "I am a taecher";
char *b = "I am a stduent";
printf("string a =%s\n", a);
printf("string b =%s\n", b);
printf("将a复制到b\n");
copy_string(&a,&b); // 传地址
printf("string a =%s\n", a);
printf("string b =%s\n", b);
return 0;
}
void copy_string(char *from, char *to)
{
while((*to++=*from++)!='\0')
;
} baige 发表于 2020-9-2 11:15
字符指针变量指向的字符串常量中的内容是不能修改(不能对它在赋值)
你的答案是正确的,但我有一个问题没弄明白,我逐条逐条执行也没看出来,故而请教:while循环,明明是空语句,为什么能完成拷贝任务? 风过无痕1989 发表于 2020-9-2 12:16
你的答案是正确的,但我有一个问题没弄明白,我逐条逐条执行也没看出来,故而请教:while循环,明明是空 ...
*to++=*from++ Cool_Breeze 发表于 2020-9-2 11:42
你的程序虽然执行没有问题,可以完成拷贝任务,但在编译时,有告警:warning C4047: 'function' : 'char *' differs in levels of indirection from 'char ** '好像是:'char'与'char**'不同级别。
我是初学,两个月里《带你学C带你飞》教学视频看了三遍,看完了谭浩强的《C语言程序设计》第四版,对指针、字符串的操作还是没有一个清晰的概念,于是,现在刚开始啃《C与指针》这本书。
请不吝赐教:既然级别不同,为何还能正常完成拷贝任务? 本帖最后由 Cool_Breeze 于 2020-9-2 16:33 编辑
风过无痕1989 发表于 2020-9-2 12:32
你的程序虽然执行没有问题,可以完成拷贝任务,但在编译时,有告警:warning C4047: 'function' : 'char...
#include<stdio.h>
int main()
{
void copy_string(char *from, char *to);
char *a = "I am a taecher"; //const char *a = "I am a taecher"; 这样写会更好一些,指向常量的指针
char *b = "I am a stduent"; //const char *b = "I am a taecher";
printf("a = %#X\n", a) ; // a = 0X404000
printf("b = %#X\n", b) ; // b = 0X40400F
printf("string a =%s\n", a);
printf("string b =%s\n", b);
printf("将a复制到b\n");
copy_string(&a,&b);
printf("string a =%s\n", a);
printf("string b =%s\n", b);
printf("a = %#X\n", a) ; // a = 0X404000
printf("b = %#X\n", b) ; // b = 0X404000
return 0;
}
void copy_string(char *from, char *to)
{
//这里只是改变了指针b指向的地址 相当于 b=a
while((*to++ = *from++) != '\0');
} Cool_Breeze 发表于 2020-9-2 15:03
我明白了,只是改变指针指向的地址,谢谢兄弟 !
不过,你可能写得太急了,最后一个条件少写了一层括号:
while( (*to++=*from++) !='\0') 风过无痕1989 发表于 2020-9-2 15:25
我明白了,只是改变指针指向的地址,谢谢兄弟 !
不过,你可能写得太急了,最后一个条件少写了一层括 ...
是啊,加上了,要仔细啊!
常量 一开始就是固定的,如果要修改它,就不应该使用常量,这会出现逻辑上的错误! 风过无痕1989 发表于 2020-9-2 15:25
我明白了,只是改变指针指向的地址,谢谢兄弟 !
不过,你可能写得太急了,最后一个条件少写了一层括 ...
这就是常量指针和指针常量的区别吧(⊿)慢慢绕,苍天饶过谁,绕出来你就明白了 Neverturnback 发表于 2020-9-2 16:28
这就是常量指针和指针常量的区别吧(⊿)慢慢绕,苍天饶过谁,绕出来你就明白了
在指针这个问题上,我已经绕了近一个月了,反反复复看书、理解、看书、理解,还是一知半解的
页:
[1]