C
中的代码复制字符串#include <stdio.h>
char *copyString(char *,char *);
void main()
{
char *first = (char *)calloc(sizeof(char),10);
char *second = (char *)calloc(sizeof(char),10);
printf("Enter first string:\t");
scanf("%s",first);
printf("%s",copyString(first,second));
}
char *copyString(char *a,char *b)
{
int i=0;
while(*(a+i)!='\0')
{
*(b+i)=*(a+i);
i++;
}
*(b+i)='\0';
return b;
}
Case 1:
输入:您好
输出你好
Case 2:
输入: Hello World
输出你好
所以,我的问题是space
是否被视为newline/null
??因为,在第二种情况下,它显示如下..
答案 0 :(得分:9)
默认情况下,scanf
在遇到空格字符' '
时停止读取标准输入流。要修复它,您可以使用扫描集。
scanf("%[^\n]", first);
答案 1 :(得分:2)
scanf()
在第一个空格后停止读取。使用fgets()
或gets()
[不安全]。关于为什么就是这样,你可能想在这里阅读POSIX页面:http://www.unix.com/man-page/POSIX/3posix/scanf/和ISO C标准:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf。它详细描述了scanf()
和fscanf()
(以及所有其他标准C函数)应该如何工作。这些通常遵循有关C库中的函数如何工作的指导原则。
所有编译器都努力创建符合POSIX标准的c-c库,这些库在大多数UNIX平台上都能正常工作。
标准C函数实际上是在这里定义的:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
答案 2 :(得分:1)
这是因为当你输入字符串时停止在空格后读取。因此,您的"Hello"
字符串中只有first
,而不是"Hello world"
。
使用fgets()
阅读整行。
答案 3 :(得分:1)
根据建议scanf
在第一个空格处停止,您可以使用fgets
来读取整行。当你工作时分配更多的空间,因为“Hello World”是12个字节而不是10个。
答案 4 :(得分:0)
您的scanf
正在扫描一个字符串,要扫描两个字符串,您应该写:
scanf("%s %s",first,second);
同样,对于要扫描的更多字符串,您应该这样做,这样可以提供尽可能多的%s
个想要扫描的字符串。
答案 5 :(得分:0)
此处的scanf函数将读取输入,直到遇到空格。您需要实现readline函数。
答案 6 :(得分:0)
使用#include并使用string.h lib的strcpy函数。以下是示例:
strcpy(first, second);
这应该运行良好。