1

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:


输入:你好世界

输出:你好

所以,我的问题是是否space被认为是newline/null?? 因为,在第二种情况下,它显示如下..

4

7 回答 7

9

默认情况下,遇到scanf空格字符时停止读取标准输入流' '。要修复它,您可以使用扫描集。

scanf("%[^\n]", first);
于 2012-11-06T17:05:02.400 回答
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 库,这些库在大多数 UNIX'ish 平台上都可以正常工作。

标准的 C 函数实际上在这里定义:http ://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

于 2012-11-06T17:05:54.407 回答
1

这是因为当您输入字符串时在空格后停止读取。所以你实际上只有"Hello"在你的first字符串中,而不是"Hello world".

用于fgets()阅读整行。

于 2012-11-06T17:06:31.707 回答
1

正如建议scanf在第一个空格处停止,您可以fgets改为使用来阅读整行。当你开始工作时分配更多空间,因为“Hello World”是 12 个字节而不是 10 个字节。

于 2012-11-06T17:06:48.897 回答
0

scanf正在扫描一个字符串以获取要扫描的两个字符串,您应该编写:

      scanf("%s %s",first,second);

同样,对于要扫描的更多字符串,您应该这样做,即提供尽可能多%s的要扫描的字符串。

于 2012-11-06T17:08:12.920 回答
0

此处的 scanf 函数将读取输入,直到遇到空格。您将需要实现一个 readline 函数。

于 2012-11-06T17:10:35.533 回答
0

使用 #include 并利用 string.h lib 的这个函数 strcpy。以下是示例:

    strcpy(first, second);

这应该运行良好。

于 2012-11-06T17:12:59.490 回答