首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C-主要参数的输出反向

C-主要参数的输出反向
EN

Stack Overflow用户
提问于 2017-05-18 21:59:10
回答 3查看 1.6K关注 0票数 0

编写一个程序,以反向顺序显示其命令行参数的字符。(如果命令行参数为“1”和“2”,则程序应显示"owt eno“。

我的程序奏效了。但是,在给出结果后,它会崩溃(“程序已停止工作”)。

代码语言:javascript
复制
    #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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-18 22:11:45

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

Update:针对null检查指针

代码语言:javascript
复制
#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;
}
票数 0
EN

Stack Overflow用户

发布于 2017-05-18 22:33:06

编写一个以相反顺序显示命令行参数字符的程序。

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

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 2017-05-18 22:09:50

正如他们在注释中提到的,您从未为revString初始化过(分配内存空间)。

因为它是一个char指针,所以实际上需要分配内存来存储数组的所有字符值。

revString的声明替换为:

代码语言:javascript
复制
char * revString = malloc(strlen(string)+1);

它会成功的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44058408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档