字符串中的二维数组在C中创建错误输出
发布时间:2020-12-16 10:35:17 所属栏目:百科 来源:网络整理
导读:我正在尝试做一些简单的事情,如打印字符串的反向. 示例: Hello World! This is me 需要的O / P: me is This World! Hello 我的代码是这样的: #includestdio.h#includestring.hint main(){ char *arr[20] ; int i,j; int size; char *revarr[20]; printf("
我正在尝试做一些简单的事情,如打印字符串的反向.
示例: Hello World! This is me 需要的O / P: me is This World! Hello 我的代码是这样的: #include<stdio.h> #include<string.h> int main(){ char *arr[20] ; int i,j; int size; char *revarr[20]; printf(" enter the number of wordsn"); scanf("%d",&size); for(i=0;i<size;i++) scanf("%s",&arr[i]); for(i=0;i<size;i++) { printf("%sn",&arr[size-1-i]); //overwritten words revarr[i]=arr[size-1-i]; } printf(" the reversed sentence is %sn",(char *)revarr); } 我除了arr [0],arr [1]等是单独的实体,但在打印和存储它们时它们看起来像这样重叠: Hello World O / P: World HellWorld the reversed sentence is WorlHell@#$ 我似乎无法弄清楚出了什么问题! 编辑: printf(&arr[0]); printf(&arr[1]); 我明白了: HellWorld World 我期望它打印的是 Hello World 解决方法
你将arr和revarr声明为char指针数组.您需要为其元素动态分配内存.
另请注意,您不需要&在声明中 scanf("%s",&arr[i]); 和 printf("%sn",&arr[size-1-i]); // ^No need of & 这是您的代码的修改版本.请注意,不需要使用revarr来反转字符串. #include<stdio.h> #include<stdlib.h> int main(){ size_t i,size; printf("Enter the number of wordsn"); scanf("%d",&size); char *arr[size] ; // Variable length array. Supported by C99 and latter for(i = 0; i < size; i++) { arr[i] = malloc(20); // Assumimg words are no longer than 20 characters scanf("%s",arr[i]); } printf("The reversed sentence is:n"); for(i = size-1; i >= 0; i--) // Run loop in reverse order and print words printf("%s ",arr[i]); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |