将整数转换为另一个字符指针

标签 c pointers

我正在测试下面的代码,但输出只是说

ptr char = (null)

知道为什么会这样吗?

int buf[1024];
buf[0] = 10;
buf[1] = 0;
buf[2] = 1992;
buf[3] = 42;
buf[4] = 5;
char *ptr;
ptr = (char*)buf+2;
printf("ptr char = %s\n",*ptr);

我只是对上面的代码进行了实验,以便我可以部分地了解下面的代码会做什么。 这是我正在处理的代码

int fillNSendHttpReq(int8u seq, char* domain, char* uri, char method, char* contentType, char* otherHeader, int contentLen, char* content, unsigned char timeout, char moreData, char isHttps)

{
int16u encodedLen = moreData?contentLen|0x8000:contentLen; 

//if moredata = true then encodelen = contentlenBITWISEOR0x8000
char *ptr = NULL;
int8u buf[1024];
memset(buf, 0, sizeof(buf));

buf[0] = SNIC_HTTP_REQ;
buf[1] = seq;
*((int16u*)&buf[2]) = 0x5000; //swapped
buf[4] = method;
buf[5] = timeout;



 if (isHttps) {
buf[0] = SNIC_HTTPS_REQ;//SNIC_HTTPS_REQ = 0
*((int16u*)&buf[2]) = 0xbb01; // 443 swapped
 }

ptr = (char*)buf+6; //convert in8u to char * ???
ptr += sprintf(ptr, "%s", domain)+1; //ptr = ptr + strlen(domain)+1
ptr += sprintf(ptr, "%s", uri)+1;
ptr += sprintf(ptr, "%s", contentType)+1;
ptr += sprintf(ptr, "%s", otherHeader)+1;
*((int16u*)ptr) = swap16(encodedLen);
ptr += 2;

if (contentLen) 
    memcpy(ptr, content, contentLen);

serial_transmit(CMD_ID_SNIC, buf, ptr-(char*)buf+contentLen, ACK_NOT_REQUIRED);
return 0;

我不明白的部分是 ptr-(char*)buf+contentLen 被分配给定义为 int 的变量,所以这让我感到困惑我的内容去了哪里,这是一个字符。

最佳答案

int一些大小。当您将 2 添加到 char* 时,指针前进两个字节;要将它推进 int 的大小,您需要执行 (char*)(buf + 2)buf 之后的两个字节可能是 buf[1],也可能是 buf[0] 的一半,但显然它指向零,因为这就是您稍后通过取消引用 ptr 得到的结果——NULL0。将字符串传递给 printf 时,您不会先取消引用它。

不过,我真的不知道如何修复那部分,因为它没有多大意义。如果您的代码接近您的意图,那么它可能应该是这样的:

char *ptr = (char*)(buf + 2);
printf("ptr char = %s\n", ptr);

在这种情况下,它将使用您的示例 buf 打印零个或一个字符。

关于将整数转换为另一个字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654775/

相关文章:

c - C 类型的取值范围

无法找出 C 中的指针/数组/字符串

c - 这在 C 中打印什么以及如何打印?

c - LibAIFF 关闭文件 : Pointer being freed was not allocated occurs randomly

c++ - C++中的指针结构和动态内存分配

Swift2,在 CFSocketCallBack 中调用 swift 函数 - EXEC_BAD_ACCESS

c - 文件指针在传递给函数时表现不同。为什么?

c - 为什么 C 编译器在编写一个不返回任何内容且没有副作用的函数时不会给出警告?

python - 如何通过编程方式在qcow2中拍摄快照?

c - 函数调用中的 Malloc 似乎在返回时被释放?