Как удалять с типа char*?
вот так просто. Я на C++ кстати. Я читал cplusplus.com функции библиотеки cstdlib, но я не могу найти простую функцию для этого. Я знаю длину Чара, мне нужно только стереть последние три буквы от нее. Я могу использовать строку C++, но это для обработки файлов, которая использует char*, и я не хочу делать преобразования из string в C char.
5 ответов
Если вам не нужно копировать строку где-то еще и можете изменить ее
/* make sure strlen(name) >= 3 */
namelen = strlen(name); /* possibly you've saved the length previously */
name[namelen - 3] = 0;
Если вам нужно скопировать его (потому что это строковый литерал или вы хотите сохранить оригинал)
/* make sure strlen(name) >= 3 */
namelen = strlen(name); /* possibly you've saved the length previously */
strncpy(copy, name, namelen - 3);
/* add a final null terminator */
copy[namelen - 3] = 0;
Я думаю, что некоторые из ваших сообщений были потеряны в переводе.
чтобы усечь строку в C, вы можете просто вставить завершающий нулевой символ в нужную позицию. Затем все стандартные функции будут рассматривать строку как имеющую новую длину.
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[] = "one one two three five eight thirteen twenty-one";
printf("%s\n", string);
string[strlen(string) - 3] = '';
printf("%s\n", string);
return 0;
}
если вы знаете длину строки вы можете использовать арифметические операции над указателями, чтобы получить строку с последними тремя символами:
const char* mystring = "abc123";
const int len = 6;
const char* substring = mystring + len - 3;
обратите внимание:substring
указывает на ту же память, что и mystring
и действует только как mystring
допустимо и оставлено без изменений. Причина, по которой это работает, заключается в том, что строка c не имеет никаких специальных маркеров в начале, только NULL
завершение в конце.
я интерпретировать ваш вопрос как желание последнего три персонажа, избавляясь от начала, в отличие от того, как Дэвид Хеффернан читал его, один из нас явно ошибается.
bool TakeOutLastThreeChars(char* src, int len) {
if (len < 3) return false;
memset(src + len - 3, 0, 3);
return true;
}
Я предполагаю, что мутация Строковой памяти безопасна, так как вы сказали стереть последние три символа. Я просто перезаписываю последние три символа с помощью "NULL" или 0.
это может помочь понять, как C char*
"строк" работы:
вы начинаете читать их с символа, на который указывает char*, пока не нажмете char (или просто 0).
Итак, если у меня есть
char* str = "theFile.nam";
затем str+3
представляет собой строку File.nam
.
но вы хотите удалить последние три символа, поэтому вы хотите что-то вроде:
char str2[9];
strncpy (str2,str,8); // now str2 contains "theFile.#" where # is some character you don't know about
str2[8]=''; // now str2 contains "theFile." and is a proper char* string.