这是我创建了一个指针数组的代码。指针数组保存了字符串的基地址。我创建了添加函数,通过它我将字符串添加到指针数组。我的座右铭是交换两个字符串的第一个字符" akshay"和#34; raman"。例如," akshay"交换之后应该成为" rkshay"和"拉曼"交换后应该成为" aaman"即一个akshay应该被raman替换,反之亦然。 但是,当我执行它时会显示错误,例如"问题导致程序停止正常工作.Windows将关闭程序并通知解决方案是否可用。" 请提供解决方案。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 6
char *names[MAX];
int count;
int add(char *);
void swap(int,int);
void show();
int main()
{
int flag;
flag=add("akshay");
if(flag==0)
printf("unable to add string\n");
flag=add("parag");
if(flag==0)
printf("unable to add string\n");
flag=add("raman");
if(flag==0)
printf("unable to add string\n");
printf("names before swapping \n");
show();
swap(0,2);
printf("names after swapping \n");
show();
return 0;
}
/*adds given string */
int add(char *s)
{
if(count<MAX)
{
names[count]=s;
count++;
return 1;
}
else return 0;
}
/*swaps the first characters of the two strings */
void swap(int i,int j)
{
char temp;
temp=(*names[i]);
*names[i]=(*names[j]);
*names[j]=temp;
}
/* displays the elements */
void show()
{
int i;
for(i=0;i<count;i++)
{
puts(names[i]);
printf("\n");
}
}
答案 0 :(得分:0)
如何将两个字符串的第一个字符相互交换?
该功能可以按以下方式查看
void swap( char *s1, char *s2 )
{
if ( *s1 && *s2 )
{
char c = *s1;
*s1 = *s2;
*s2 = c;
}
}
至于你的程序,那么你正在尝试修改导致未定义行为的字符串文字。
来自C标准(6.4.5字符串文字)
7未指明这些阵列是否与它们不同 元素具有适当的值。 如果程序尝试 修改这样的数组,行为是未定义的。
您应该为每个添加的字符串动态地为您的指针数组分配内存。
当函数依赖于全局变量时,这也是一个坏主意。
考虑到根据C标准,不带参数的函数main
应声明为
int main( void )