如何将两个字符串的第一个字符相互交换?这两个字符串存储在指针数组中

时间:2017-09-04 18:36:04

标签: c arrays string pointers swap

这是我创建了一个指针数组的代码。指针数组保存了字符串的基地址。我创建了添加函数,通过它我将字符串添加到指针数组。我的座右铭是交换两个字符串的第一个字符" 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");
    }
}

1 个答案:

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