简体   繁体   English

C编程:将int *转换为char *

[英]C Programming: convert int* to char*

I understand that I cannot convert an int* into a char* but must copy the int* into a char* array using sprintf. 我知道我无法将int *转换为char *,但必须使用sprintf将int *复制到char *数组中。 My issue is that I believe I am using sprintf correctly but I am getting this warning: warning: passing argument 1 of 'sprintf' from incompatible pointer type. 我的问题是,我相信自己正确使用了sprintf,但收到此警告:警告:从不兼容的指针类型传递'sprintf'的参数1。 Here is a condensed and simplified version of what I am trying to do. 这是我正在尝试做的精简版本。

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...
}

This has been driving me nuts... If you want more of my code then please let me know. 这让我发疯了...如果您想要更多我的代码,请告诉我。

Thanks! 谢谢!

EDIT: here is more code. 编辑:这是更多代码。 I skipped the basic variable declarations, I can add those in but I assure you all those are fine 我跳过了基本的变量声明,可以在其中添加这些声明,但我向您保证所有这些都很好

Here is a function to do the conversion: 这是执行转换的函数:

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]);

}

EDIT 2: So someone kindly pointed out a silly error that removed the warning I was getting. 编辑2:所以有人请指出一个愚蠢的错误,删除了我得到的警告。 But my char* only prints out the first character.... I initially was returning a local char* but found out that that will always only return the first character. 但是我的char *只打印出第一个字符。...我最初返回的是本地char *,但发现那总是返回第一个字符。 What am I doing wrong? 我究竟做错了什么? Can someone explain to me why this is happening? 有人可以向我解释为什么会这样吗? I'm sorry, I'm new to pointers and I'm really struggling with this... 抱歉,我是指针的新手,对此我真的很挣扎...

you code is fine. 您的代码很好。 I tested the following which gives the correct result and no compiler warnings, 我测试了以下内容,它们给出了正确的结果,并且没有编译器警告,

#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...
        }
}

In your ints_chars function, why do you declare carray to be int* ? ints_chars函数中,为什么要声明carrayint*

In your example code you have 在您的示例代码中

ints_to_chars(int* carray ints_to_chars(int * carray

carray should be a char* not a int* carray应该是char *而不是int *

You have the wrong signature: 您的签名错误:

void ints_to_chars(int* carray, int count, int* iarray)
                   ^^ this should be char*

try this : 尝试这个 :

    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);

by the way, this is an assigment to find prime numbers using multi-process or multi-threaded. 顺便说一下,这是使用多进程或多线程查找素数的一种手段。 ^-^ ^-^

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM