使用指针复制c中的字符串

时间:2012-11-06 17:03:07

标签: c pointers

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 ??因为,在第二种情况下,它显示如下..

7 个答案:

答案 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);

这应该运行良好。