加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

字符串中的二维数组在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]等是单独的实体,但在打印和存储它们时它们看起来像这样重叠:
I / P:

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]); 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读