0

次の作業を行うにはどうすればよいですか?アイデアは、関数が外部ポインターを割り当てて、この概念を別のプログラムで使用できるようにすることですが、引数が互換性のないポインター型からのものであるとgccが言い続けるため、それはできません...単純なはずです、しかし、私はそれを見ていません。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int allocMyPtr(char *textToCopy, char **returnPtr) {
    char *ptr=NULL;
    int size=strlen(textToCopy)+1;
    int count;

    ptr=malloc(sizeof(char)*(size));
    if(NULL!=ptr) {
        for(count=0;count<size;count++) {
            ptr[count]=textToCopy[count];
        }
        *returnPtr = ptr;
        return 1;
    } else {
        return 0;
    }
}

int main(void) {
    char text[]="Hello World\n";
    char *string;

    if(allocMyPtr(text,string)) {
        strcpy(string,text);
        printf(string);
    } else {
        printf("out of memory\n");
        return EXIT_FAILURE;
   }
   free(string);
   return EXIT_SUCCESS;
}
4

3 に答える 3

2

ほとんど正しいですが、関数はポインターへのポインターを必要とするため、アドレス演算子を使用してポインターのアドレスを関数に渡す必要があります。

allocMyPtr(text, &string)
于 2012-11-27T13:00:51.867 に答える
1

代わりに使用&stringして、この入力パラメーターに関連するタイプが ischar **であり、notである問題を修正しますchar *

if(allocMyPtr(text,&string)) {

ソースコードに関するコメント:

関数はallocMyPtr()既にテキストから文字列へのコピーを行っています。

では、なぜ strcpy でコピーを作成するのでしょうか。無駄だ

strcpy(string,text); // this useless
于 2012-11-27T13:01:34.707 に答える
1

ポインタが一致するようにstring使用pass by value するallocMyPtr()必要があります。pass by adress

互換性のないchar *タイプchar **

これを行う :

if(allocMyPtr(text,&string)) { }
于 2012-11-27T13:03:21.740 に答える