終了ゼロのスペースを予約し、ソース文字列から宛先配列にコピーする必要があります。また、関数内でソース文字列が変更されていないので、修飾子const
で宣言する必要があります。
機能は、同じタスクを行いPOSIX機能strdup
があることを考慮してください、次のよう
char* foo(const char* word)
{
char* result = (char*)malloc(strlen(word) + 1);
return strcpy(result, word);
}
を見ることができます。あなたはその後、関数は次のよう
char* foo(const char *word)
{
char* result = (char*)malloc(strlen(word) + 1);
char *p = result;
do
{
*p++ = toupper((unsigned char)*word);
} while (*word++);
return result;
}
や機能を見ることができます大文字に変換する必要があり、文字列のコピーと一緒に
の場合は、ループの代わりに、DO-whileループしながら使用して書き込むことができます。例えば、ここで
char* foo(const char *word)
{
char* result = (char*)malloc(strlen(word) + 1);
char *p = result;
while ((*p++ = toupper((unsigned char)*word++)));
return result;
}
は実証プログラム
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* foo(const char *word)
{
char* result = (char*)malloc(strlen(word) + 1);
char *p = result;
while ((*p++ = toupper((unsigned char)*word++)));
return result;
}
int main(void)
{
char *s = foo("hello world");
puts(s);
free(s);
return 0;
}
その出力が問題だった
HELLO WORLD
です。ありがとうございました。 – leggo
この回答で問題が解決した場合は、左側のチェックをクリックして問題を解決できます。 – Useless
しかし、私はこの答えを投稿してから特定の時間の後にしかこれを行うことができません:) – leggo