为什么该程序只打印第一个字符?

时间:2019-10-07 07:11:36

标签: c

我正在尝试编写一个程序,该程序使用一个字符串,并使用按引用调用的概念将该字符串复制到另一个char数组,但是我的程序似乎只输出第一个字符

#include <stdio.h>
#include <conio.h>
void copy(char *[]);
void main()
{
    char a[10];
    printf("\t\tPROGRAM TO COPY STRING USING FUNCTION AND POINTER");
    printf("\n\t\t--------------------------------------------");
    printf("\nEnter the string :");
    gets(a);
    copy(&a);
    getch();
}
void copy(char *p[]){
    int i=0;
    char b[10];
    while(*p!='\0'){
        b[i]=*p++;
        i++;
    }
    b[i]='\0';
    printf("\nThe string after copying is %s",b);
}

2 个答案:

答案 0 :(得分:1)

当您传递指向数组的指针时,不需要此[]。似乎您正在传递一个指针数组。试试:

#include <stdio.h>
#include <conio.h>
void copy(char* p);
void main()
{
    char a[10];
    printf("\t\tPROGRAM TO COPY STRING USING FUNCTION AND POINTER");
    printf("\n\t\t--------------------------------------------");
    printf("\nEnter the string :");
    fgets(a, 10, stdin);
    copy(a);
    getch();
}
void copy(char* p){
    int i=0;
    char b[10];
    while(*p!='\0'){
        b[i]=*p++;
        i++;
    }
    b[i]='\0';
    printf("\nThe string after copying is %s",b);
}

因为要传递一个只有一个指针的数组,该指针指向第一个字符。然后,通过增加指针来遍历thic数组,以获取数组中的下一个字符。

此外,您不应使用gets。使用nottead fgets。而且我忘记了,您不必传递数组的地址(&a),因为直接指向此值,所以您可以直接传递a

答案 1 :(得分:0)

&a will give a pointer to pointer not the pointer to first element of the array
a will give you the pointer to the first element to the array

因此,要复制字符串,您应该将指向第一个元素的指针传递给数组,并在函数中仅接收char指针,而复制不起作用