交换程序中不允许使用不完整类型

时间:2014-11-30 09:45:22

标签: c

这个程序用于交换两个字符串,我没有使用malloc并使用函数进行操作,它给了我错误,它是不允许的不完整类型

#include<stdio.h>
#include<conio.h>
#include<string.h>
void swapping(char s1[],char s2[])
{
int temp=s1;
s1=s2;
s2=temp;
}

int main (void)
{
char st1[30],st2[30];
printf("Enter the first string");
scanf("%s",&st1);
printf("Enter the second string");
scanf("%s",&st2);
printf("The new string after swapping ",swapping(st1,st2));
getch();
}

2 个答案:

答案 0 :(得分:1)

在此功能定义中

void swapping(char s1[],char s2[])
{
int temp=s1;
s1=s2;
s2=temp;
}

变量s1的类型为char *,变量temp的类型为int。编译器无法在声明

中初始化temp
int temp=s1;

没有将s1强制转换为int类型。但是如果你要添加演员,这个功能没有意义。

还要考虑到数组没有赋值运算符。

如果您的编译器支持可变长度数组,那么您可以编写

#include <stdio.h>
#include <string.h>

void swapping( size_t n, char s1[n], char s2[n] )
{
    char tmp[n];

    strcpy( tmp, s1 );
    strcpy( s1, s2 );
    strcpy( s2, tmp );
}   

int main(void) 
{
    char s1[30] = "Hello";
    char s2[30] = "Bye-bye";

    printf( "%s\t%s\n", s1, s2 );

    swapping( 30, s1, s2 );

    printf( "%s\t%s\n", s1, s2 );

    return 0;
}

否则该功能可能如下所示

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void swapping( char s1[], char s2[], size_t n )
{
    char *tmp = malloc( n * sizeof( char ) );

    strcpy( tmp, s1 );
    strcpy( s1, s2 );
    strcpy( s2, tmp );

    free( tmp );
}   

int main(void) 
{

    char s1[30] = "Hello";
    char s2[30] = "Bye-bye";

    printf( "%s\t%s\n", s1, s2 );

    swapping( s1, s2, 30 );

    printf( "%s\t%s\n", s1, s2 );


    return 0;
}

在这两种情况下,输出都是

Hello   Bye-bye
Bye-bye Hello

答案 1 :(得分:0)

以下程序可以满足您的需求:

#include<stdio.h>
#include<conio.h>
#include<string.h>
void swapping(char s1[],char s2[])
{
char temp[30]; //create an array of char in order to store a string

strcpy(temp,s1);
strcpy(s1,s2);
strcpy(s2,temp); //use strcpy to swap strings
}

int main (void)
{
char st1[30],st2[30];

printf("Enter the first string");
scanf("%s",st1);
printf("Enter the second string");
scanf("%s",st2); //the & is removed from both the scanfs

printf("The first string is %s and the second string is %s \n",st1,st2); //print before swapping 
swapping(st1,st2); //swap strings

printf("The first string is %s and the second string is %s \n",st1,st2); //print after swapping

getch();
return 0;
}

如果您不想要,可以在交换前删除打印printfst1的{​​{1}}。 st2被删除,因为数组的名称衰减到第一个元素的点。您还需要另一个&数组而不是char来交换两个字符串。