_char *
_をcの大文字に変換しようとしていますが、関数toupper()
はここでは機能しません。
Tempの値の名前を取得しようとしています。名前はコロンの前にあります。この場合は「Test」です。次に、名前を完全に大文字にします。
_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 *を使用する必要があるということです(ここでは、char配列を実際に使用することはできませんが、できますか?)。
どんな助けでも大歓迎です。
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
_に変換します。
toupper()
は、単一の文字に対してのみ機能します。しかし、文字列へのポインタに必要なstrupr()
があります。
toupper()
は、一度に1つの要素(int
引数、_unsigned char
_またはEOFと同じ範囲の値)に対して機能します。
プロトタイプ:
int toupper(int c);
ループを使用して、stringから一度に1つの要素を提供する必要があります。
変数に文字列そしてそれを格納を大文字にしたい人のために(これは私がこれらの回答を読んだときに探していたものです)。
_#include <stdio.h> //<-- You need this to use printf.
#include <string.h> //<-- You need this to use string and strlen() function.
#include <ctype.h> //<-- You need this to use toupper() function.
int main(void)
{
string s = "I want to cast this"; //<-- Or you can ask to the user for a string.
unsigned long int s_len = strlen(s); //<-- getting the length of 's'.
//Defining an array of the same length as 's' to, temporarily, store the case change.
char s_up[s_len];
// Iterate over the source string (i.e. s) and cast the case changing.
for (int a = 0; a < s_len; a++)
{
// Storing the change: Use the temp array while casting to uppercase.
s_up[a] = toupper(s[a]);
}
// Assign the new array to your first variable name if you want to use the same as at the beginning
s = s_up;
printf("%s \n", s_up); //<-- If you want to see the change made.
}
_
注:代わりに文字列を小文字にしたい場合は、toupper(s[a])
をtolower(s[a])
に変更します。