0

int* を char* に変換できないことは理解していますが、sprintf を使用して int* を char* 配列にコピーする必要があります。私の問題は、sprintf を正しく使用していると思いますが、次の警告が表示されることです。これは、私がやろうとしていることの要約および簡略化されたバージョンです。

int* iarray = calloc(top + 1, sizeof(int));
char* carray = (char*)calloc(count,sizeof(char));
/*
some code that adds stuff to the int*, it works fine....something like
for(i=0; i<=count; i++)
    iarray[i] = i;
lets assume that iarray is something like 1234
*/
for(i=0; i<=count; i++)
{
    sprintf(carray, "%d", iarray[i]);
    printf("%s", carray) //this is just to test, it only prints out the first number...
}

これは私を夢中にさせています...私のコードをもっと知りたい場合は、私に知らせてください。

ありがとう!

編集:ここにさらにコードがあります。基本的な変数宣言をスキップしました。それらを追加できますが、それらはすべて問題ないことを保証します

変換を行う関数は次のとおりです。

void ints_to_chars(char* carray, int count, int* iarray)
{
    //convert ints to char*
    int i;
    //char *char_array=(char*)calloc(count,sizeof(char));
    printf("ints to chars: char array-->");
    for(i=0; i<=count; i++)
    {
        sprintf(carray, "%d", iarray[i]);
        printf("%s",carray);
    }
    return;
}

int main(int argc, char** argv)
{
int i, j, count;

if(i-1 == 0)
                  bottom = 2;
              else
                  bottom = (int)atoi(argv[i-1])+1;
              top = (int)atoi(argv[i]);
              printf("child %d: bottom=%d, top=%d\n", getpid(), bottom, top);

              prime_iarray = calloc(top + 1, sizeof(int));
              primenumbers(prime_iarray,bottom,top);
              count = prime_iarray[0];

              /*printf("prime int array: \n");
              for(i=1; i<=count; i++)
              {
                  printf("%d", prime_iarray[i]);
              }*/

              //int* into char*
              prime_carray = (char*)calloc(count,sizeof(char));
              ints_to_chars(prime_carray, count, prime_iarray);
              printf("prime char array:\n");
              printf("%s",&prime_carray[0]);

}

編集2:だから、誰かが私が得ていた警告を取り除いたばかげたエラーを親切に指摘しました。しかし、私の char* は最初の文字のみを出力します....最初はローカルの char* を返していましたが、常に最初の文字のみを返すことがわかりました。私は何を間違っていますか?なぜこれが起こっているのか誰かが私に説明できますか? 申し訳ありませんが、私はポインタに不慣れで、これに本当に苦労しています...

4

4 に答える 4

1

あなたのコードは大丈夫です。以下をテストしましたが、正しい結果が得られ、コンパイラの警告はありませんでした。

#include "stdio.h"
#include "stdlib.h"
int main()
{

        int count = 20;
        int top = 10;
        int* iarray = calloc(top + 1, sizeof(int));
        char* carray = (char*)calloc(count,sizeof(char));
        int i;
        int n;

        iarray[0] = 9;
        for(i=0; i<=count; i++)
        {
                        n = sprintf(carray, "%d", iarray[i]);
                        printf("%s", carray); //this is just to test, it only prints out the first number...
        }
}

あなたのints_chars関数では、なぜあなたはあると宣言carrayしていますint*か?

于 2013-09-25T13:43:51.267 に答える
1

あなたのコード例では

ints_to_chars(int* carray

carray は int* ではなく char* でなければなりません

于 2013-09-25T13:51:11.140 に答える
0

これを試して :

    char a[100];
    char b[4];
    a[0] = '\0';
    int i;

    for(i=0; i<=count; i++)
    {

            sprintf(b ,"%d" , iarray[i]);
            strcat(a , b);
            strcat(a , "  ");           

    }
printf("%s", a);

ちなみに、これはマルチプロセスまたはマルチスレッドを使用して素数を見つける課題です。^-^

于 2013-09-26T16:14:07.590 に答える