【发布时间】:2016-08-06 01:17:57
【问题描述】:
我正在尝试反转字符串中的单词(而不是单词本身)。我正在尝试仅使用指针(不使用数组语法)动态分配二维数组。我的程序编译得很好,但最终只显示一个单词作为输出,并在这里和那里有空格。这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void rev(char *x, int n);
int words(char * p);
int main()
{
char *p = (char *)malloc(101*sizeof(char));
fgets(p, 101, stdin);
rev(p, words(p));
free(p);
return 0;
}
void rev(char *x, int n)
{
char **y = (char **)malloc(101*sizeof(char *));
int i = 0;
int *j = (int *)calloc(101, sizeof(int));
*y = (char *)malloc(101*sizeof(char));
while(*x!='\n')
{
if(*x==' ')
{
i++;
*(y+i) = (char *)malloc(101*sizeof(char));
}
else
{
*(*(y+i)+(*(j+i))) = *x;
(*(j+i))++;
}
x++;
}
i++;
int z, q;
for(z=i-1; z>0; z--)
{
for(q=0; q<(*(j+i)); q++)
{
printf("%c", *(*(y+z)+(q)));
}
printf(" ");
}
for(q=0; q<*j; q++)
{
printf("%c", *(*(y)+(q)));
}
printf("\n");
for(q=0; q<i; q++)
{
free(y+i);
}
free(j);
free(y);
}
int words(char * p)
{
int x = 0;
while(*p!='\n')
{
if(*p==' ')
{
x++;
}
p++;
}
return ++x;
}
我只想使用指针算术来做到这一点。我一直在尝试过去 20 个小时,但无法弄清楚。谁能解释这个错误以及如何纠正它?
输入
Hello World
输出
Hello
输入
This is my input
输出
This
【问题讨论】:
-
您的代码中没有二维数组。
char **不是二维数组,不能指向一个。指针不是数组,反之亦然。并且不要使用幻数。 -
for(q=0; q<i; q++){ free(y+i);}和for(q=0; q<i; q++){ free(j+i);}似乎很糟糕,因为它们使用了无意义的循环,或者多次对同一指针执行free。 -
@MikeCAT 是不是因为这个错误,我没有得到所需的输出?
-
你有使用数组的工作代码吗?
标签: c arrays pointers multidimensional-array