2014-05-04 54 views
-1
main() { 
     char names [5][20] = { 
       "rmaesh", 
       "ram", 
       "suresh", 
       "sam" 
       "ramu" 
     }; 
char *t; 
     t = names[2]; 
     names[2] = names[3]; 
     names[3] = t; 

     printf(" the array elemsnt are \n"); 
     int i = 0; 
     for (i = 0; i < 5; i ++) 
       printf("\n%s", names[i]); 
} 

我收到以下错误,而编译这个程序什么是该类别中的代码

stringarrary.c: In function ‘main’: 
stringarrary.c:12:11: error: incompatible types when assigning to type ‘char[20]’ from type ‘char *’ 
    names[2] = names[3]; 
     ^
stringarrary.c:13:11: error: incompatible types when assigning to type ‘char[20]’ from type ‘char *’ 
    names[3] = t; 

回答

3

是非法的尝试并分配到一个数组的错误。在这种情况下,您应该使用strcpy函数。请注意,如果您打算交换两个数组,则您的char *t;想法不起作用,因为它只指向您现有的一个字符串;一旦你写上names[2],那数据就没有了。

char t[20]; 
strcpy(t, names[2]); 
strcpy(names[2], names[3]); 
strcpy(names[3], t); 

此外,"\n%s"应该是"%s\n" - 你想换行来你打印的内容之后。别忘了#include <stdio.h>#include <string.h>

3

第13行的错误最容易理解:names[3]是一个数组char;你不能只为它指定一个指针。在第12行,编译器正在将names[3]转换为一个指针,并试图将其分配给数组names[2],这也是不能做到的。

请尝试复制字符串。在C中,不能使用=运算符复制数组;使用memcpystrcpy家族的功能。

0

尝试此

#include<stdio.h> 
#include <string.h> 
main() { 
    char names [5][20] = { 
     "rmaesh", 
     "ram", 
     "suresh", 
     "sam", //<----- You are missing this (,) at the end 
     "ramu" 
    }; 
char *t; 
    strcpy(t, names[2]); // And also use this syntax 
    strcpy(names[2] , names[3]); 
    strcpy(names[3], t); 

    printf(" the array elemsnt are \n"); 
    int i = 0; 
    for (i = 0; i < 5; i ++) 
     printf("\n%s", names[i]); 
} 
+0

您尚未向t分配任何内存。你应该在最后使用'char t [20]'或'char * t = malloc(20)'和'free(t)'。你的代码会导致分段错误。 –

+0

此外'conio.h'不是标准文件(也不是clrscr) –

+0

@ Mohit Jain但是''C编译器'中不能使用'char * t = malloc(20)'语法。你可以使用'char * t =(char *)malloc(20)':D –

0

names阵列是字符的二维阵列。正如其他答案指出的那样,当您要复制一组字符时,您需要使用memcpystrcpy

替代解决方案是使names为指针的一维数组。结果代码看起来像这样。

int main(void) 
{ 
    char *names[5] = { 
     "rmaesh", 
     "ram", 
     "suresh", 
     "sam", 
     "ramu" 
    }; 
    char *t; 

    t = names[2]; 
    names[2] = names[3]; 
    names[3] = t; 

    printf(" the array elemsnt are \n"); 
    int i = 0; 
    for (i = 0; i < 5; i ++) 
     printf("\n%s", names[i]); 
} 

这种方法的优点是它允许你按照你想要的方式操纵指针。缺点是字符串是只读的。尝试修改字符串将导致未定义的行为。

相关问题