这个程序用于交换两个字符串,我没有使用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();
}
答案 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;
}
如果您不想要,可以在交换前删除打印printf
和st1
的{{1}}。 st2
被删除,因为数组的名称衰减到第一个元素的点。您还需要另一个&
数组而不是char
来交换两个字符串。