Ошибка при передаче указателя на константу в качестве аргумента

В этом, например, использование концепции вызова по адресу для извлечения всех изменений данных, которые происходят в вызове функции …

В main(),

я) передавая два аргумента
я) указатель int
II) указатель на константу -> который не может изменить значение, которое он держит …

ii) Изменение значений int * и присвоение некоторых значений const void * в вызовах функций.

* Наконец, я пытаюсь напечатать значения в main()

* получение значений указателя int правильно (без проблем)

* получение значения указателя void как NULL ..

Требование:

Нужно получить вывод в main() как это

main :: ajskdffllagkdjdjdhdjhd (я хочу сказать, что мне нужно напечатать значения void * вот так)

Но я получаю значение как main :: NULL

Что мне нужно сделать, чтобы получить ожидаемый результат?

#include <stdio.h>
#include <stdlib.h>

void func(int *len,const void *pBuf);
void func2(int **len,const void **pBuf);
void func3(int ***len,const void ***pBuf);
int main()
{
int len = 0;
const void *pBuf;
printf("len b4 ::%d\n",len);
printf("%p\n",&pBuf);
func(&len,&pBuf);
printf("len after::%d\n",len);
printf("%p\n",&pBuf);
printf("main::%s\n",(const char *)pBuf);
return 0;
}

void func(int *len,const void *pBuf)
{
*len = 20;
printf("func1 :: %p\n",&pBuf);
func2(&len,&pBuf);
}

void func2(int **len,const void **pBuf)
{
printf("func2::%p\n",&pBuf);
**len = 30;
func3(&len,&pBuf);
}

void func3(int ***len,const void ***pBuf)
{
const void *pMy = "ajskdffllagkdjdjdhdjhd";
**pBuf = pMy;
printf("func3::%p\n",&pBuf);
printf("func3::%s\n",(const char *)**pBuf);
***len = 40;
}

Output:

len b4::0
0x7fffa9c51468
func1 :: 0x7fffa9c51440
func2::0x7fffa9c51420
func3::0x7fffa9c513f0
func3::ajskdffllagkdjdjdhdjhd
len after::40
0x7fffa9c51468
main::(null)

0

Решение

Вы правы со строковым литералом. Сожалею.

Однако вам нужно изменить адрес, на который указывает pBuf:

void func(int *len,const void **pBuf)
{
*len = 20;
printf("func1 :: %p\n",pBuf);
func2(&len,&pBuf);
}

void func2(int **len,const void ***pBuf)
{
printf("func2::%p\n",pBuf);
**len = 30;
func3(&len,&pBuf);
}

void func3(int ***len,const void ****pBuf)
{
const void *pMy = "ajskdffllagkdjdjdhdjhd";
***pBuf = pMy;
printf("func3::%p\n",&pBuf);
printf("func3::%s\n",(const char *)***pBuf);
***len = 40;
}

len является int, Для того, чтобы изменить его, нужно позвонить func() с адресом этого int значение.
pBuf это указатель Чтобы изменить адрес, на который он указывает, вам нужно позвонить func() с адресом этого указателя.

0

Другие решения

Вы ловите адрес int с одним указателем и ловить адрес pointer также с одним указателем .. Это проблема. В функциях измени *pBuf как **pBuf а также **pBuf как ***pBuf и так далее..

0