#include <string.h>
int copystring(char *str2, char *str1)
int main()
{
char str1[30] = "hello,string copied!\n"
char str2[30]
printf("str2[30]=%d\n", copystring(str1, str2))// 你的copystring函数需要的参数是两个字符型指针,而数组名本身就可以作指针来使用,&str1[30]指的是字符数组str1中第31(从0开始,这里实际上越界了)个元素的地址
return 0
}
int copystring(char *str2, char *str1)
{
printf("str2 is %s\n", str2)
strcpy(str1, str2)// strcpy函数第一个参数是复制后存放的数组,第二个才是要复制的对象
return *str2// 我不太理解你这个函数想返回什么,你现在做的是将str2[0]的值以整型返回(h的ASCII码对应104)
}
如果还有什么问题可以追问
#include<stdio.h>
#include<string.h>
intmain()
{
charstr1[]="123456",str2[7]
inti,j=0,len
len=strlen(str1)
for(i=len-1i>=0i--)
{
str2[j++]=str1[i]
}
str2[6]='\0'
printf("%s",str2)
return0
}
//方法二指针法
#include<stdio.h>
#include<string.h>
intmain()
{
charstr1[]="123456",*p,str2[7]
inti
p=&str1[5]
for(i=0i<strlen(str1)i++)
{
str2[i]=*p--
}
str2[strlen(str1)]='\0'
printf("%s",str2)
return0
}
扩展资料
C语言高效复制连接字符串
源字符串的长度未知且目标字符串大小固定时,遵循一些流行的安全编码准则来将连接结果限制为目标区大小实际上会导致两个冗余的传递。例如,按照CERT关于安全使用strncpy和strncat的建议,并且目标区的大小是dsize字节,我们可能会得到以下代码。
与对strncat的调用不同,当s1的长度大于d的大小时,上面对strncpy的调用不会将NUL('\0')结束符追加到d上。它是一个常见的想当然的错误。此外,当s1短于dsize-1时,strncpy函数将所有剩余的字符填满为NUL('\0'),这也被视为一种浪费的,因为随后对strncat的调用将覆盖掉它们。