写入char数组,空输出

时间:2014-11-24 23:46:51

标签: c arrays string pointers reverse

我想知道这里发生了什么,我在反向函数之外为dest变量分配空间。然后在函数调用中写入它。但我的输出是空白的。我想在没有malloc的情况下这样做,纯粹出于教育目的。感谢

#include <stdio.h>
#include <string.h>

/*function declaration*/
void reverse(char *src, char *dest);

int main(void) {

char src[] = "hello, world";
char dest[strlen(src)];
reverse(src, dest);
printf("%s\n", dest);

return 0;
}

/*function reverse a string*/
void reverse(char *src, char *dest) {
int i;
int j = 0;
for(i = strlen(src); i >= 0; i--) {
  *(dest+j) = *(src+i);
  ++j;
  }
}

3 个答案:

答案 0 :(得分:1)

1)因为你的迭代以

开头
for(i = strlen(src); i >= 0; i--) {

它将0分配给dest,从而终止字符串。所以printf()在看到0终结符时没有打印任何内容。您可以将其重写为:

for(i = strlen(src) - 1; i >= 0; i--) {
  *(dest+j) = *(src+i);
  ++j;
  }
 dest[j] = 0; /* terminates the string */

2)你有另一个问题。您的dest空间不足。它应该是:

char dest[strlen(src) + 1]; /* Notice the +1 */

3)您应该将size_t用于数组索引而不是int

答案 1 :(得分:1)

您忘记了字符串中的空字符。 dest不足以保持字符串的反向,因为需要一个空终止符:

 char dest[ strlen(src) + 1 ];

然后在循环中,您将空终止符复制到字符串的前面,因此它本质上是字符串""但使用更多内存。您需要从索引strlen() - 1开始:

for(i = strlen(src)-1; i >= 0; i-- ){

答案 2 :(得分:0)

问题在于for(i=strlen(src).....中的reverse()src[strlen(src)]0(零;字符串终止)。所以当你到达printf()时,它会看到第一个字符并输出一个空字符串。

使用strlen(str)-1,然后在 for循环后使用*(dest+j) = 0

总的来说,reverse()应为:

void reverse(char *src, char *dest) {
    int i;
    int j = 0;
    for(i = strlen(src)-1; i >= 0; i--) {
        *(dest+j) = *(src+i);
        ++j;
    }
    *(dest+j) = 0;
}