C 将一个字符串复制到另一个包含函数的字符串的程序正在打印奇怪的字符
这是代码。它必须包含void main()之前的部分,因为这是我被告知的代码要求。void strcopy之后的内容需要保留到void main()C 将一个字符串复制到另一个包含函数的字符串的程序正在打印奇怪的字符,c,arrays,function,copy,c-strings,C,Arrays,Function,Copy,C Strings,这是代码。它必须包含void main()之前的部分,因为这是我被告知的代码要求。void strcopy之后的内容需要保留到void main() 谢谢首先,您没有调用strcopy,因此只打印string2的未初始化内容。其次,在strcopy中,您忘记了终止目标字符串(请注意,您的循环在写入“\0”之前终止)。写: 如果不终止字符串,则目标内存中的任何字节都将被视为“属于字符串”,直到达到0x0字节为止。这些字节可能会产生如此奇怪的输出。但您从未调用过strcopy() 读取输入后添加函数
谢谢首先,您没有调用
strcopy
,因此只打印string2
的未初始化内容。其次,在strcopy中,您忘记了终止目标字符串(请注意,您的循环在写入“\0”之前终止)。写:
如果不终止字符串,则目标内存中的任何字节都将被视为“属于字符串”,直到达到0x0字节为止。这些字节可能会产生如此奇怪的输出。但您从未调用过strcopy() 读取输入后添加函数调用:
strcopy(string1, string2);
其他问题包括:
函数应返回main()
。因此,将定义更改为:int
并返回intmain(void){…
值,例如int
returnexit\u SUCCESS;
- 您尚未将空字节插入目标。您需要它,因为您正在使用
将其作为字符串打印。请在while循环后添加%s
string2[i]=0;
- 从
的格式说明符中删除scanf()
。s
足以读取换行符。相反,您可能会考虑使用。因为您使用的%[^\n]
易受缓冲区溢出和溢出的影响scanf()
strcopy()
,因此string2()
未初始化。应使用scanf(“%999[^\n]s”,string1);
来防止缓冲区溢出。
Enter the string:
hello
t��\�
void strcopy(char * string1, char * string2)
{
int i = 0;
while (string1[i] != '\0') {
string2[i] = string1[i];
i++;
}
string2[i]='\0';
return;
/* copies string1 to string 2 */
}
strcopy(string1, string2);