memcpy,memcmp,strcmp,strlen,strcat,
memcpy,memcmp,strcmp,strlen,strcat,strcpy,strstr,strchr
以上の関数を自作しました。
ひとつひとつを見たときに動作を確認したところうまく出来たのですが、この関数をプログラムに組み込んだところうまく動作しませんでした。
どこか間違っているところがあったら指摘して頂きたいと思います<m(__)m>
ちなみに標準関数と全く同じものにしたいわけではなく、それを自分なりに考えて作りたいという趣旨ですので、ご理解ください。
char *MyMemcpy(char *str1, char *str2, size_t n)
{
char *p1 = str1;
char *p2 = str2;
while(n--){
*p1 = *p2;
p1++;
p2++;
}
return str1;
}
void *MyMemcmp(void *str1, void *str2)
{
char *p1 = (char*)str1;
char *p2 = (char*)str2;
int n = 0, k = 0;
while( *p1 != '\0'){
*p1++;
n++;
}
while( *p2 != '\0'){
*p2++;
k++;
}
if(n > k){
return str1;
}else if(n == k){
return 0;
}else if(n < k){
return str2;
}
}
char *MyStrcmp(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;
int n = 0, k = 0;
while( *p1 != '\0'){
*p1++;
n++;
}
while( *p2 != '\0'){
*p2++;
k++;
}
if(n > k){
return str1;
}else if(n == k){
return 0;
}else if(n < k){
return str2;
}
}
size_t MyStrlen(const char *str1)
{
char *p1 = (char*)str1;
size_t len = 0;
while(*p1 != NULL){
*p1++;
len++;
}
return len;
}
char *MyStrcat(char *str1, const char *str2)
{
char *p1 = str1;
char *p2 = (char*)str2;
while(*p1 != NULL){
*p1++;
}
while(*p2 != NULL){
*p1 = *p2;
*p1++;
*p2++;
}
return str1;
}
char *MyStrcpy(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;
while( *p2 != NULL){
*p1 = *p2;
*p1++;
*p2++;
}
*p1 = '\0';
return str1;
}
char *MyStrstr(char *str1, char *str2)
{
char *p1 = str1;
char *p2 = str2;
while(*p1 != *p2)
{
if(*p1 == '\0'){
return 0;
}
*p1++;
}
return p1;
}
char *MyStrchr(const char *str1, char str2)
{
char *p1 = (char*)str1;
while(*p1 != str2)
{
if(*p1 == '\0'){
return 0;
}
*p1++;
}
return p1;
}
お礼
納得できました。 ありがとうございます。