Strchr удаляя ту часть, которую я хочу
Так что я дурачусь с strchr
получить часть строки из файла:
void manipulateComputers(char *name)
{
name[strlen(name)-2] = '\0';
printf("%s\n", name);
char *ptr = strchr(name, ' ');
printf("%s\n", ptr);
}
Во-первых printf
это читает:zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
На втором printf
это читает: 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
Как видите, zelda
ушел, что-то вроде того, что я хотел сделать. Я хотел удалить zelda
, но сейчас я хочу использовать zelda
,
По сути, я хотел второй printf
просто напечатать zelda
а не строка без zelda
, Как я могу получить это zelda
в конечном итоге передать его другой функции. Спасибо
3 ответа
Вы не потеряли zelda
; указатель name
все еще указывает на это.
Вы можете распечатать zelda
используя (среди прочих методов):
int z_len = ptr - name;
printf("Zelda was here: %*.*s\n", z_len, z_len, name);
Преимущество этого метода перед многими альтернативами заключается в том, что исходная строка остается неизменной - неизмененной. Это означает, что это также работает, когда строка const
строка, такая как строковый литерал.
Вы либо копируете это в другую строку, либо можете использовать этот трюк:
char *ptr = strchr( name, ' ' );
if( ptr )
{
char old_val = *ptr; /* Remember the old character (in this case we know it was ' ') */
*ptr = '\0'; /* Terminate the sub-string */
printf( "%s\n", name );
*ptr = old_val; /* Restore the original character */
}
#include<stdio.h>
#include<string.h>
int main()
{
char newarray[40];
char* array="zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1";
printf("Orignal is :%s \n",array);
char *ptr = strchr(array, ' ');
if(ptr != NULL)
{
printf("%s\n", ptr);
if((ptr-array) < 40){
strncpy(newarray,array,(ptr-array)*sizeof(char));
newarray[(ptr-array)] = '\0';
printf("Filtered string is :%s",newarray);
}
}
return 0;
}
Итак, идея в том, что у вас есть начальный адрес строки, а теперь у вас также есть адрес, где заканчивается и эта часть строки. Итак, давайте скопируем столько строк в другой массив и используем их в дальнейшем. Когда я бегу
./a.out
Orignal is :zelda 1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
1 flux 1 hydra 1 willow 1 swift 1 aeon 1 neptune 1
Filtered string is :zelda