C - 输出主参数的反转

时间:2017-05-18 21:59:11

标签: c string parameter-passing main

编写一个程序,以相反的顺序显示其命令行参数的字符。 (如果命令行参数是"一个"和"两个",程序应该显示" owt eno"

我的计划有效。但是,在给出结果后它会崩溃("程序已停止工作")。

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

char * myReverse ( char * string );

int main ( int argc, char *argcv[] )
{
  char args[argc-2];
  int i = argc - 1;

  while ( i > 0 )
  {
    char * rev = myReverse (argcv[i--]);
    puts(rev);
  }

  return 0;
}

char * myReverse ( char * string )
{
  int i = strlen(string) - 1 ;
  char * revString;
  int pos = 0;

  revString[i+1] = '\0';

  while ( i >= 0 )
  {
    revString[i] = string[pos++];
    i--;
  }

  return revString;
}

3 个答案:

答案 0 :(得分:1)

  

编写一个显示其命令行字符的程序   反向的参数

因为我也是初学者,我可以写程序吗?:)

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

int main( int argc, char * argv[] )
{
    for (int i = argc; i-- > 1; )
    {
        size_t n = strlen(argv[i]);
        while (n != 0) putchar(argv[i][--n]);
        putchar(' ');
    }

    putchar('\n');
}

答案 1 :(得分:0)

正如他们在评论中提到的那样,你永远不会为revString初始化(分配内存空间)。

由于它是char指针,实际上你需要分配内存来存储数组的所有字符值。

revString的声明替换为:

char * revString = malloc(strlen(string)+1);

它会起作用。

答案 2 :(得分:0)

您忘了为字符串分配内存。您可以通过使用堆栈分配的数组或通过在堆上分配内存来解决此问题。我通过调用malloc在堆上分配内存来解决问题。

更新:指针检查为空

#include <stdio.h>
#include <string.h>
#include <stdlib.h>  // This changed

char * myReverse ( char * string );

int main ( int argc, char *argcv[] )
{
  char args[argc-2];
  int i = argc - 1;

  while ( i > 0 )
  {
    char * rev = myReverse (argcv[i--]);
    if(ptr != NULL) {
       puts(rev);
       free(rev);  // This changed
    }
  }

  return 0;
}

char * myReverse ( char * string )
{
  int i = strlen(string) - 1 ;
  char * revString = malloc(i + 1);  // This changed
  if(ptr == NULL) return NULL;

  int pos = 0;

  revString[i+1] = '\0';

  while ( i >= 0 )
  {
    revString[i] = string[pos++];
    i--;
  }

  return revString;
}