将类型化数组返回到主函数

我从返回类型为char *的主文件调用foo()函数。 从foo()我通过类型转换“(char *)ar”返回int数组。 ar是大小为2的数组。现在,我可以在main()中检索ar [0]而不是ar [1](给出特殊字符)。

foo.c的

#include <string.h>
int ar[2];
    char *foo(char* buf)
    {
        //static ar[2]  this also gives same problem

       //various task not concen with ar[]


    buf[strlen(buf)-1]='';
    if( (bytecount=send(hsock, buffer, strlen(buffer)-1,0))== -1){
        fprintf(stderr, "Error sending data %dn", errno);
        goto FINISH;
    }
    if((bytecount = recv(hsock, ar, 2 * sizeof(int), 0))== -1){
        fprintf(stderr, "Error receiving data %dn", errno);
        goto FINISH;
    }

    printf("Positive count: %d nNegative count: %d n",ar[0],ar[1]); //This prints correct values
    close(hsock);

FINISH:
;
printf("array item2 %d n",ar[1]); // Gives correct value for ar[0] and ar[1]
return (char *)ar;
}

main.cpp

在下面的文件ch [0]给出正确的值,而ch [1]给出特殊字符

#include<stdio.h>
#include<string.h>
#include "foo.h"
int main(int argc, char *argv[] )
{
    char buffer[1024];
    char *ch;
    strcpy(buffer,argv[1]);
    printf("Client : n");
    if ( argc != 2 ) /* argc should be 2 for correct execution */
    {
              printf( "n%s filenamen", argv[0] );
    }
    else 
    {
        printf("nstring is :%s n",buffer);
    ch=foo(buffer);
    printf("Counts :%d n",(int)ch[1]);  //Here (int)ch[0] and ch[1] special char
    return (int)ch;
    }

}

ar [1]有什么问题,为什么它没有被正确接收?


你得到一个字符,然后将它转换为一个int,所以你只看到前8个字节。 你需要首先转换为int *(但这不是一件好事)H2CO3会告诉你为什么最有可能)

printf("Counts :%d n",((int*)ch)[1];  

ch [1]是字符数组的第二个元素,因为char的维数(可能)与int的维数不同,所以您没有获得第二个int。

您应该返回一个int *,或者至少将char *转换为main中的int *

int* i = (int*)ch;
i[0]; //instead of ch[0]
i[1]; //instead of ch[1]
链接地址: http://www.djcxy.com/p/72169.html

上一篇: Returning type casted array to main function

下一篇: Interleaving of putchar() and printf() functions