这是代码。它必须在void main()之前有部分,因为它是我被告知代码的要求。在void strcopy之后需要保留的东西直到void main()。
#include <stdio.h>
void strcopy(char * string1, char * string2)
{
int i = 0;
while (string1[i] != '\0') {
string2[i] = string1[i];
i++;
}
return;
/* copies string1 to string 2 */
}
void main()
{
char string1[1000], string2[1000];
int i;
printf("Enter the string: \n");
scanf("%[^\n]s", string1);
printf(" %s ", string2);
return;
}
这就是正在印刷的东西,我很难过。有人可以帮帮我吗?
Enter the string:
hello
t��\�
由于
答案 0 :(得分:1)
首先,您不要拨打strcopy
,因此您只打印string2
的未初始化内容。其次,在strcopy
中,您忘记终止目标字符串(请注意,您的循环将在`\ 0&#39;之前终止)。写:
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 */
}
如果不终止字符串,则目标内存中的任何字节都被视为&#34;属于字符串&#34;直到达到0x0字节。而这些字节可能会产生如此奇怪的输出。
答案 1 :(得分:0)
但你从未打电话给strcopy()
。
读取输入后添加函数调用:
strcopy(string1, string2);
其他问题是:
main()
函数应返回int
。因此,请将定义更改为:int main(void) {...
并返回int
值,例如return EXIT_SUCCESS;
。%s
将其打印为字符串。在while循环后添加string2[i] = 0;
。s
的格式说明符中删除scanf()
。 %[^\n]
足以读取换行符。相反,您可以考虑使用fgets()
。因为您使用scanf()
- 容易受到缓冲区溢出和generally inferior。