Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将一个字符串复制到另一个包含函数的字符串的程序正在打印奇怪的字符_C_Arrays_Function_Copy_C Strings - Fatal编程技术网

C 将一个字符串复制到另一个包含函数的字符串的程序正在打印奇怪的字符

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() 读取输入后添加函数

这是代码。它必须包含void main()之前的部分,因为这是我被告知的代码要求。void strcopy之后的内容需要保留到void main()


谢谢

首先,您没有调用
strcopy
,因此只打印
string2
的未初始化内容。其次,在strcopy中,您忘记了终止目标字符串(请注意,您的循环在写入“\0”之前终止)。写:


如果不终止字符串,则目标内存中的任何字节都将被视为“属于字符串”,直到达到0x0字节为止。这些字节可能会产生如此奇怪的输出。

但您从未调用过strcopy()

读取输入后添加函数调用:

strcopy(string1, string2);
其他问题包括:

  • main()
    函数应返回
    int
    。因此,将定义更改为:
    intmain(void){…
    并返回
    int
    值,例如
    returnexit\u SUCCESS;
  • 您尚未将空字节插入目标。您需要它,因为您正在使用
    %s
    将其作为字符串打印。请在while循环后添加
    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);