编写一个程序,以反向顺序显示其命令行参数的字符。(如果命令行参数为“1”和“2”,则程序应显示"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;
}发布于 2017-05-18 22:11:45
忘记为字符串分配内存。您可以通过使用堆栈分配数组或在堆上分配内存来解决这个问题。我通过调用malloc在堆上分配内存来解决这个问题。
Update:针对null检查指针
#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;
}发布于 2017-05-18 22:33:06
编写一个以相反顺序显示命令行参数字符的程序。
因为我也是初学者,我可以写这个程序吗?:)
#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');
}发布于 2017-05-18 22:09:50
正如他们在注释中提到的,您从未为revString初始化过(分配内存空间)。
因为它是一个char指针,所以实际上需要分配内存来存储数组的所有字符值。
将revString的声明替换为:
char * revString = malloc(strlen(string)+1);它会成功的。
https://stackoverflow.com/questions/44058408
复制相似问题