OPは文字列を大文字に変換したいようです。さて、ここで何とかOPが割り当て部分を台無しにしました。渡された文字列にuppercase
文字を代入することで、コードを書き直すことができます。
しかし、ここでは、コードはコンパイラが不平を言っていることをしています。。私たちはchar
にchar*
を割り当てようとしています。思考がほとんどなくてもコード全体を簡素化することができます。文字列をすべて大文字に変換するモジュールを記述します。それでおしまい。それから、 "hello"や文字列でテストします。
#include<stdio.h>
#include<ctype.h>
#include<string.h>
void toupperString(char s[])
{
size_t len = strlen(s), i = 0;
while(i < len)
{
s[i] = toupper((unsigned char) s[i]);
i++;
}
}
int main(void) {
char s[100];
strcpy(s,"hello"); // char s[100]="hello" also works;
toupperString(s);
printf("%s\n",s);
return 0;
}
あなたのputchar
の使用は正しかったです。だからこれは今も印刷に行くという追加機能で動作します。 (それが機能であるかどうかは、印刷する以外には役に立たないため、いつもに与えられたものを印刷するのは良い考えではありません)。
void toupperString(char s[])
{
size_t len = strlen(s), i = 0;
while(i < len)
{
s[i] = toupper((unsigned char) putchar(s[i]));
i++;
}
}
あなたはこの機能でも不審な点があります。たとえば、その戻り値。 \0
文字を返すのはなぜですか?それは必要ですか?答えが「いいえ」の場合、戻り値はvoid
で、何も返されていないことを示します。また配列がポインタに壊れるので、char配列が変更され、それを返すために何もする必要はありません。あなたは基本的に文字の元の配列を変更しています。
まあ、我々は
char* toupperString(char *s)
{
char *p = s;
while(*s)
{
*s= toupper((unsigned char) *s);
++s;
}
return p;
}
Pardon?理解していない。あなたは何を求めているのか少し具体的になりますか? –
関数にライブラリ関数と同じ名前を付けることはお勧めできません。 – interjay
なぜあなたは関数内に 's [50] =" hello ";'を持っていますか?これは関数に渡されているものをオーバーライドします。 –