В следующем коде есть несколько проблем:
char* removelast(char* s) {
char* r = s;
while (*s) {
s++;
}
s--;
*s = '\0';
return r;
}
- Он не проверяет правильность ввода, как
s==NULL
- Если ввод является пустой строкой (как былоотмечен @Swordfish в комментариях) этот код будет вызывать неопределенное поведение .
- Если ввод
const char *
(например, «Hello World!»), этот код также вызывает undefinedПоведение .
Я бы предложил изменить сигнатуру функции на char *removeLast(const char * s)
, проверить правильность ввода, выделить новый буфер для строки без последнего символа.Скопируйте необходимые символы из s
в новую строку и верните ее указатель.
Что-то в этом роде (надеюсь, это сработало, не проверял)
char *removeLast(const char *s)
{
char *newStr = NULL;
size_t sLen; // length of the 's' string
// check for 's' validity (not NULL and not empty) and successful 'malloc'
if ( s && (sLen = strlen(s)) && (newStr = malloc(sLen)) )
{
int res = strcpy_s(newStr, sLen - 1, s);
if (!res)
{
newStr[sLen - 1] = '\0';
}
else // strcpy_s error
{
free(newStr);
newStr = NULL;
}
}
return newStr;
}