strcpy()和自定义函数中的字符串都发生了什么变化?
我最近做的字符串函数做得很好。然后,我制作了第三个字符串函数,基本上类似于strcpy(): 我这样做:strcpy()和自定义函数中的字符串都发生了什么变化?,c,char,copy,c-strings,strcpy,C,Char,Copy,C Strings,Strcpy,我最近做的字符串函数做得很好。然后,我制作了第三个字符串函数,基本上类似于strcpy(): 我这样做: int main() { char name[256]; printf("What's your name? "); scanf("%255s", name); char result[256]; strcpy(name, result); printf("Hello, %s.\n", res
int main() {
char name[256];
printf("What's your name? "); scanf("%255s", name);
char result[256];
strcpy(name, result);
printf("Hello, %s.\n", result);
}
但结果是这样的:
What's your name? builderman
Hello, .
因为某种原因没有字符串。即使键入不同的字符串,结果也会相同
问:为什么
strcpy()
毁了我的字符串?我可以用什么方法改进我的功能?我将试着分部分回答您的问题
char name[] = "Hello";
或者像这样的初始化列表:
char name[] = {'H', 'e', 'l', 'l', 'o'};
不能使用指向char(函数的返回值)的指针初始化数组
char *StrCpy(char *dest, const char *src)
{
char *returned_str = dest;
while (*src != '\0')
{
*dest = *src;
src++;
dest++;
}
*dest = '\0';
return returned_str;
}
当发送一个在数组末尾没有空终止符的字符数组时,可能会出现一个问题,这就是字符串在C中应该如何终止。函数
strcpy
具有以下声明
char *strcpy(char * restrict s1, const char * restrict s2);
即第一个参数定义复制第二个参数指向的字符串的数组
但是在你的程序中
int main() {
char name[256];
printf("What's your name? "); scanf("%255s", name);
char result[256];
strcpy(name, result);
printf("Hello, %s.\n", result);
}
您正在将未初始化的字符数组结果
复制到数组名称
中
你必须写作
strcpy( result, name );
而不是
strcpy(name, result);
对于第一个程序,则功能copy\u str
是冗余的。你可以直接写
char result[256] = name;
但是,由于数组隐式转换为指向其第一个元素的指针,初始值设定项的类型为char*
。因此,这样的数组初始化是不正确的。您可以使用字符串文字初始化字符数组,如
char s[] = "Hello";
但不能使用字符指针初始化字符数组,如
char t[] = "Hello";
char s[] = t;
您的函数copy\u str
可以如下所示
char * copy_str( char *dsn, const char *src )
{
for ( char *p = dsn; ( *p++ = *src++ ); );
return dsn;
}
:
char*strcpy(char*dest,const char*src)代码>注意参数的顺序。字符结果[256]=复制\u str(名称)代码>无法将指针分配给数组。你想这样说,constchar*result=copy\u str(name)代码>
char t[] = "Hello";
char s[] = t;
char * copy_str( char *dsn, const char *src )
{
for ( char *p = dsn; ( *p++ = *src++ ); );
return dsn;
}