c quitar el primer caracter de una matriz

Tengo una cadena:

str1 = "abcabcabc"; 

¿Cómo puedo eliminar el primer personaje? Me gustaría que el resultado final fuera:

 str1 = "bcabcabc"; 

Si tienes un puntero de carácter a una cadena como:

 char *s = "This is my string"; 

entonces simplemente puedes hacer s++ .

Si tiene una matriz de caracteres , su mejor apuesta puede ser tener un puntero a esa matriz también:

 char s[] = "This is my string"; char *ps = s; 

entonces puedes hacer ps++ y asegurarte de usar ps lugar de s .

Si no desea tener un puntero separado a su matriz, puede usar memmove para copiar los datos:

 memmove (s, s+1, strlen (s+1) + 1); // or just strlen (s) 

aunque ninguno de ellos funcionará para una cadena inicialmente vacía, por lo que tendrá que verificar eso primero. También tenga en cuenta que no es aconsejable intentar modificar los literales de cadena de esta manera (o de cualquier manera, en realidad), ya que no está definido si eso está permitido.

Otra solución es simplemente codificar un bucle:

 for (char *ps = s; *ps != '\0'; ps++) *ps = *(ps+1); *ps = '\0'; 

Esto funcionará para todas las cadenas, vacío o de otra manera.

Tratar:

 char str1[] = "abcabcabc"; char *pstr1; pstr1 = &(str1[1]); 

Mala práctica, pero como está reservado en la stack, no debería matarte. Ahora, si nos mostró su código …


Podrías usar strcpy :

 char str1[] = "abcabcabc"; char str2[sizeof(str1)-1]; if(strlen(str1) > 0) { strcpy(str2, &(str1[1])); } else { strcpy(str2, str1); } // str2 = "bcabcabc"; 

Para C ++, solo usas std :: string :: substr :

 std::string str1 = "abcabcabc"; std::string str2 = str1.substr(1, str1.length() - 1); // str2 = "bcabcabc"; 

Aquí hay una forma de hacerlo:

 int index = 0; //index to cull memmove( &word[ index ] , &word[ index +1], strlen( word ) - index) ; 

Si realmente quisieras decir

 char str1 [] = "abcabcabc"; 

Entonces lo más fácil es

 str1 = &str1[1]; 

Si desea modificar los datos reales, debe mover todo hacia arriba una posición. Puedes usar un bucle para eso o memmove() . Una función recursiva es una exageración.

Si realmente quiso decir C ++ y está usando el objeto de cadena, entonces puede usar

 str1 = str1.substr(1); 

Bueno, por lo que sé, si está preocupado por la asignación de memoria, tiene que copiar (str1 + 1) en una nueva cadena para la que asigna memoria personalmente, luego libere el primer puntero. La forma realmente simple de hacerlo sería simplemente incrementar str1 con str1 ++; Eso lo haría apuntar un carácter más lejos de lo que solía y le daría el resultado deseado con solo una línea de código.

 #include  #include  main(){ char a[10]; int i; gets(a); for (i = 0; a[i] != '\0'; i++) { a[i] = a[i + 1]; } printf("\n"); puts(a); getch(); }