joa*_*Arc 3 c string multidimensional-array
我正在尝试做一些简单的事情,如打印字符串的反向.示例:
Hello World! This is me
Run Code Online (Sandbox Code Playgroud)
需要的O/P:
me is This World! Hello
Run Code Online (Sandbox Code Playgroud)
我的代码是这样的:
#include<stdio.h>
#include<string.h>
int main(){
char *arr[20] ;
int i,j;
int size;
char *revarr[20];
printf(" enter the number of words\n");
scanf("%d",&size);
for(i=0;i<size;i++)
scanf("%s",&arr[i]);
for(i=0;i<size;i++)
{
printf("%s\n",&arr[size-1-i]); //overwritten words
revarr[i]=arr[size-1-i];
}
printf(" the reversed sentence is %s\n",(char *)revarr);
}
Run Code Online (Sandbox Code Playgroud)
我除了arr [0],arr [1]等是单独的实体,但在打印和存储它们时它们似乎重叠如下:i/p:
Hello World
Run Code Online (Sandbox Code Playgroud)
O/P:
World
HellWorld
the reversed sentence is WorlHell@#$
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄清楚出了什么问题!提前致谢!
编辑: 打印时
printf(&arr[0]);
printf(&arr[1]);
Run Code Online (Sandbox Code Playgroud)
我明白了:
HellWorld
World
Run Code Online (Sandbox Code Playgroud)
我期望它打印的是
Hello
World
Run Code Online (Sandbox Code Playgroud)
你声明arr
并revarr
作为char
指针数组.您需要为其元素动态分配内存.
另请注意,您不需要 &
in语句
scanf("%s",&arr[i]);
Run Code Online (Sandbox Code Playgroud)
和
printf("%s\n", &arr[size-1-i]);
// ^No need of &
Run Code Online (Sandbox Code Playgroud)
这是您的代码的修改版本.请注意,无需使用revarr
反转字符串.
#include<stdio.h>
#include<stdlib.h>
int main(){
size_t i, size;
printf("Enter the number of words\n");
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]);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
102 次 |
最近记录: |