我正在尝试使用命令行参数反转字符串,但我不知道为什么我会因此而出现分段错误。
var groups = myList
.AsParallel()
.GroupBy(x => x.c1)
.Where(x => x.Count() > 1);
foreach (var group in groups)
{
foreach (var value in group)
{
//duplicate values
}
}
答案 0 :(得分:1)
您必须为反向字符串分配内存,并使rev
指向该位置。
char *rev = malloc(strlen(argv[1]) + 1); // 1 extra space to store null character.
并在结尾处终止反向字符串
rev[j] = '\0';
答案 1 :(得分:0)
for for循环
for(j = 0; j <= i-1; j++)
{
rev[j] = str[k];
k--;
}
//Add this line
rev[j]='\0'; //always terminate character array with null.
printf("The reverse string is %s\n",rev);
答案 2 :(得分:0)
代码中存在多个问题:
;
for(i = 0; str[i] != '\0'; i++); {
rev
但该指针未初始化,行为未定义。你可以用这种方式反转字符串:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc > 1) {
char *str = argv[1];
int i, j, len = strien(str);
for (i = 0, j = len - 1; i < j; i++, j--) {
char c = str[i];
str[i] = str[j];
str[j] = c;
}
printf("The reverse string is %s\n", str);
}
return 0;
}
答案 3 :(得分:-1)
您可以使用递归。例如
#include <stdio.h>
int main( int argc, char * argv[] )
{
if ( !( argc < 2 ) )
{
if ( !*argv[1] )
{
printf("The reverse string is " );
}
else
{
++argv[1];
main( argc, argv );
--argv[1];
putchar( *argv[1] );
}
}
return 0;
}