Merhabalar, C ile bir şeyler yapmaya çalışıyorum. Aşağıdaki fonksiyonun sonucunda oluşan değerleri bir char pointera referans edip o değere oradan erişmek istediğimde rastgele değerler alıyorum.
run/server.h
#include <stdio.h>
#include <windows.h>
#include <winhttp.h>
int get_version_from_server(int timeout, BOOL SSLVerify, char** output_pointer){
HINTERNET winhttp = WinHttpOpen(L"Test", WINHTTP_ACCESS_TYPE_NO_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
if(!winhttp){
return GetLastError();
}
HINTERNET server_connection = WinHttpConnect(winhttp, L"domain", INTERNET_DEFAULT_PORT, 0);
if(!server_connection){
return GetLastError();
}
HINTERNET server_request = WinHttpOpenRequest(server_connection, L"GET", L"url", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
if(!server_request){
return GetLastError();
}
BOOL set_timeout = WinHttpSetTimeouts(server_request, timeout*1000, timeout*1000, timeout*1000, timeout*1000);
if(!set_timeout){
return GetLastError();
}
BOOL request_response = WinHttpSendRequest(server_request, WINHTTP_NO_ADDITIONAL_HEADERS, 0, NULL, 0, 0, 0);
if(!request_response){
return GetLastError();
}
request_response = WinHttpReceiveResponse(server_request, NULL);
if(!request_response){
return GetLastError();
}
unsigned long int data_size;
BOOL get_available_data_size = WinHttpQueryDataAvailable(server_request, &data_size);
if(!get_available_data_size){
return GetLastError();
}
char data[data_size+1];
BOOL read_data = WinHttpReadData(server_request, &data, data_size, &data_size);
if(!read_data){
return GetLastError();
}
*output_pointer = &data[0];
return 0;
}
main.c
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include "run/file.h"
#include "run/server.h"
int main(void){
char* version_data;
get_version_from_server(3, TRUE, &version_data);
printf("Version string: %s", version_data);
}
Bu şekilde denediğimde rastgele bir dizi değerler alıyorum. Ancak şöyle bir şey denediğimde:
test.c
#include <stdio.h>
int test(char** ptr){
char a[1025] = "test";
*ptr = &a[0];
return 0;
}
int main(void){
char* ptr;
test(&ptr);
printf("Sonuc: %s", ptr);
}
bir sıkıntı oluşmuyor ve doğru sonucu görüyorum. Bu iki kod arasındaki tam fark ne ve nasıl ilk fonksiyonda pointerı doğru bir şekilde referans edebilirim?