#include<stdio.h>
char *strcopy(char *t,const char *s)
{
while(*t++=*s++);
return t;
}
int main(void)
{
char h1[100],h2[100],h3[100];
char *s1,*s2,*s3;
s1=h1;
s2=h2;
s3=h3;
scanf("%s",s2);
s3=strcopy(s1,s2);
printf("%s\n",s3);
return 0;
}
代碼如上,無列印值,將16行改為
strcopy(s1,s2); s3=s1;
就有列印值了?求各位大神說明下,謝謝!
uj5u.com熱心網友回復:
1. s3 指向的地址空間 h3[100], 沒有被初始化。重點 區域變數,陣列, 必須在使用前,進行初始化。
原因 區域變數的初始值不定, 很危險。(從堆疊空間分配, 其值為上次別人剩下的值)
uj5u.com熱心網友回復:
char *strcopy(char *t,const char *s){
while(*t++=*s++);
return t;//這里的t已經指向了傳進來資料的尾部了
}
uj5u.com熱心網友回復:
是啊,你return的那個t已經漂移了好遠。很契合 刻舟求劍 哦。
uj5u.com熱心網友回復:
樓主,程式修改下,是否更容易讓你理解,指標只是記錄地址的一個變數。#include<stdio.h>
char *strcopy(char *t,const char *s)
{
char *temp = t;
while(*temp++=*s++);
return t;
}
int main(int argc, char* argv[])
{
char h1[100],h2[100],h3[100];
char *s1,*s2,*s3;
s1=h1;
s2=h2;
s3=h3;
scanf("%s",s2);
s3=strcopy(s1,s2);
printf("%s\n",s3);
return 0;
}
uj5u.com熱心網友回復:
#include<stdio.h>
char *strcopy(char *t,const char *s)
{
char *temp = t;
while(*temp++=*s++);//temp s 中記錄的地址值是在增加變化
return t; //回傳的地址值是字串首地址不變的
}
int main(int argc, char* argv[])
{
char h1[100],h2[100],h3[100];
char *s1,*s2,*s3;
s1=h1;
s2=h2;
s3=h3; // 這里 s3 -> h3[100]的地址
scanf("%s",s2);
s3=strcopy(s1,s2);//這里 s3 -> s1的地址,即h1[100]的地址。
printf("%s\n",s3);
return 0;
}
//程式執行完,h1[100]和h2[100]的內容一致,h3[100]并沒有變化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/237814.html
標籤:C語言
上一篇:求教.1e9再求冪怎么都ac不了
下一篇:請教一下前輩們這里型別轉換的問題
