2016-02-03 3 views
1

Я пытаюсь преобразовать char * в верхний регистр в c, но функция toupper() здесь не работает.Преобразование Char * в верхний регистр в C

Я пытаюсь получить имя значения temp, имя которого есть что-либо перед двоеточием, в этом случае это «Тест», а затем я хочу полностью загладить имя.

void func(char * temp) { 
// where temp is a char * containing the string "Test:Case1" 
char * name; 

name = strtok(temp,":"); 

//convert it to uppercase 

name = toupper(name); //error here 

} 

Я получаю сообщение об ошибке, что функция toupper ожидает int, но принимает char *. Вещь, я должен использовать char *, так как это то, что функция принимает, (я не могу использовать массивы символов здесь, не так ли?).

Любая помощь была бы принята с благодарностью.

ответ

7

toupper() конвертирует один char.

Просто используйте цикл:

void func(char * temp) { 
    char * name; 
    name = strtok(temp,":"); 

    // Convert to upper case 
    char *s = name; 
    while (*s) { 
    *s = toupper((unsigned char) *s); 
    s++; 
    } 

} 

детали: стандартную функцию библиотеки toupper(int) определена для всех unsigned char и EOF. С char может быть подписан, конвертировать в unsigned char.

поддержка других ОС, вызов функции, которая делает это: upstr() и strupr()

1

toupper() работ на одном элементе (int аргумента, значение в пределах такой же, как unsigned char или EOF) в то время.

Прототип

int toupper(int c);

Вы должны использовать цикл, чтобы поставить один элемент в то время, от вашего строки.

+0

Возможно, я удалю этот ответ, так как он не добавит значения, но в чем причина DV? –

1

toupper() работает только на одном персонаже. Но есть strupr(), что и нужно для указателя на строку.

+2

'strupr' не является стандартным. Насколько я знаю, это поддерживается только библиотекой Microsoft. – interjay

+0

@interjay: поддерживается также Greenhills и Borland. Но вы правы, это не в glibc. – wallyk

Смежные вопросы