我从主文件调用foo()函数,其返回类型为char *。从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]='\0';
if( (bytecount=send(hsock, buffer, strlen(buffer)-1,0))== -1){
fprintf(stderr, "Error sending data %d\n", errno);
goto FINISH;
}
if((bytecount = recv(hsock, ar, 2 * sizeof(int), 0))== -1){
fprintf(stderr, "Error receiving data %d\n", 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 filename\n", 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]有什么问题,为什么它没有被正确接收?
答案 0 :(得分:1)
您正在获取一个字符然后将其转换为int,因此您只能看到前8个字节。你需要先转换为int *(但这不是一件好事,H2CO3会告诉你为什么最有可能)
printf("Counts :%d \n",((int*)ch)[1];
答案 1 :(得分:1)
ch [1]是字符数组的第二个元素,因为char的维度(可能)与你没有得到第二个int的int的维度不同。
你应该返回一个int *,或者至少将char *转换为主
中的int *int* i = (int*)ch;
i[0]; //instead of ch[0]
i[1]; //instead of ch[1]