请教关于字符串问题!
#include "stdio.h"#include "assert.h"
#include "stdlib.h"
#include "string.h"
char *stringCopy(char *strDestination,const char *strSaurce)
{
char *p=strDestination;
assert(strDestination!=NULL&&strSaurce!=NULL);
while( *strSaurce!= '\0' )
*p++ = *strSaurce++;
*p=' ';
return p;
}
void main()
{
char strDest[10],strSaur[]="hello!";
printf("%d\n%d\n",strlen(strSaur),strlen(strDest));
stringCopy(strDest,strSaur);
printf("%s\n",strDest);
printf("%d,%d\n",sizeof(strDest),strlen(strDest));
system("pause");
}
6
15
hello! 烫烫汤?
10,15
请按任意键继续. . .
为什么strDest的长度是15啊?
调用函数stringCopy函数后,输出strDest时后面为什么有乱码啊?
搜索更多相关的解决方案:
字符
----------------解决方案--------------------------------------------------------
你的strDest长度为10,而只有7个元素被复制,后面三个是编译器填充的随机值,但是你打印的时候10个数组元素都打印了,后面的3个元素打印出乱码!
----------------解决方案--------------------------------------------------------
'\0'啊'\0'
----------------解决方案--------------------------------------------------------
char *stringCopy(char *strDestination,const char *strSaurce)
{
char *p=strDestination;
assert(strDestination!=NULL&&strSaurce!=NULL);
while( *strSaurce!= '\0' )
*p++ = *strSaurce++;
*p=' '; // 改成*p = '\0'
return p;
}
----------------解决方案--------------------------------------------------------
strlen(strDest))这个的问题是因为没有给strDest初值,所以返回的是一个随机值.
以上是个人理解,希望高手指正
给LZ个建议
不要用*p++,.而用*strDestination,因为你要返回P,如果想用p的话,那就返回strDestination
你的这个char *stringCopy(char *strDestination,const char *strSaurce)函数执行完以后,返回的是一个指向不知道那里的指针
----------------解决方案--------------------------------------------------------
这样如何?
char *stringCopy(char *strDestination,const char *strSaurce)
{
assert(strDestination!=NULL&&strSaurce!=NULL);
strncpy(strDestination,*strSaurce,sizeof(*strSaurce));
if(n > 0)
strDestination[n-1] = '\0';
}
----------------解决方案--------------------------------------------------------
写错了
小改一下
有错误请指正哦呵呵
char *stringCopy(char *strDestination,const char *strSaurce)
{
int n = sizeof(*strSaurce);
assert(strDestination!=NULL&&strSaurce!=NULL);
strncpy(strDestination,strSaurce,n);
if(n > 0)
strDestination[n-1] = '\0';
}
[[italic] 本帖最后由 yangyang321 于 2007-11-25 14:57 编辑 [/italic]]
----------------解决方案--------------------------------------------------------
char *stringCopy(char *strDestination,const char *strSaurce)
{
char *p=strDestination;
assert(strDestination!=NULL&&strSaurce!=NULL);
while( *strSaurce!= '\0' )
*p++ = *strSaurce++;
*p=' '; /* 应该是 '\0' */
return p;
}
----------------解决方案--------------------------------------------------------
const char *strSaurce 这样定义了```
还可以这样吗? strSaurce++; 好像不可以直接这样改变吧``
----------------解决方案--------------------------------------------------------
int n = sizeof(*strSaurce);
你试试这句等于多少?你会发现它怎么一直是个定值呢?然后就去查一查sizeof的用法
----------------解决方案--------------------------------------------------------