替换字符串malloc中的字符

给定一个字符串和两个字符,我想找到第一个字符存在于字符串上的次数,它首先出现在什么位置并创建一个新字符串,其中第二个字符每次显示时都替换第一个字符,但我是最后一部分有问题。 这是我到目前为止:

#include  #include  #include  main () { char string[10], string1; char c1, c2; int contador, i, l, n, contador2; printf ("Introduza uma string e dois caracteres.\n"); scanf ("%s %c %c", string, &c1, &c2); l = strlen (string); contador = 0; for (n = 0; n < l; n++) { if (c1 == string[n]) { contador = contador + 1; } } for (n = 0; n < l; n++) { if (c1 == string[n]) { contador2 = n + 1; /*Dá-se o valor de n + 1 à variável contador2 porque n começa em 0*/ break; } } string1 = (char) malloc ((l +1)*sizeof(char)); for (n = 0; n < l; n++) { if (c1 == string1[n]) { n = c2; } } printf ("%d\n", contador); printf ("%d\n", contador2); printf ("%s", string1); } 

我很感激您提供的任何帮助。

你的string1声明是错误的。 它不应该是char而是指向charchar*的指针。 那么你也不会想要转换malloc的返回值。

一些小提示:

  • 不要在一行中声明多个变量,特别是如果它们的类型不同。
  • 根据定义, sizeof(char)1malloc计算它在char数中分配的大小。
  • 正确缩进代码。 它不仅使其对其他人更具可读性,而且如果您稍后重新访问代码,您也会自己欣赏它。

string1声明为char *

 char *string1; 

然后分配内存为

 string1 = malloc ((l + 1)*sizeof(char)); 

string1只是一个char – 声明string1char * string1 。 你替换字符的for循环也搞砸了。 它应该是:

  for (n = 0; n < l; n++) { if (c1 == string[n])// You should compare with string and not string1 { string1[n] = c2; } else string1[n]=string[n]; } 

此外,不需要在C中强制转换malloc - malloc返回void* 。 您的完整更正代码:

 #include  #include  #include  int main () { char string[10],* string1; char c1, c2; int contador, i, l, n, contador2; printf ("Introduza uma string e dois caracteres.\n"); scanf ("%s %c %c", string, &c1, &c2); l = strlen (string); contador = 0; for (n = 0; n < l; n++) { if (c1 == string[n]) { contador = contador + 1; } } for (n = 0; n < l; n++) { if (c1 == string[n]) { contador2 = n + 1; /*Dá-se o valor de n + 1 à variável contador2 porque n começa em 0*/ break; } } string1 = malloc ((l +1)*sizeof(char)); for (n = 0; n < l; n++) { if (c1 == string[n]) { string1[n] = c2; } else string1[n]=string[n]; } printf ("%d\n", contador); printf ("%d\n", contador2); printf ("%s", string1); } 

我很感激您提供的任何帮助。

请开始缩进代码。 缩进比解决问题花了我更多时间。