gpt4 book ai didi

c - 从 C 中的函数返回一个字符

转载 作者:太空宇宙 更新时间:2023-11-04 05:01:49 25 4
gpt4 key购买 nike

我已经尝试了所有 Google 可用的方法,但似乎无法解决这个问题。我试图返回一个 char 并传递给另一个没有运气的函数。我需要做某种内存位置吗?

char hostname[] = "www.XXXXX.com";
uint8 ipaddr[] = {XXX,XXX,XXX,XXX};
char uri[] = "/api/Login/";
char key[] = API_KEY; //3490324032-asdfasd-234234
const int port = 80;

//function to combine uri and key
char combine(char key[], char uri[]) {
int i = 0;
int x = 0;
char long_s[sizeof(uri) + sizeof(key)];

while(uri[i]) {
long_s[i] = uri[i];
++i;
}
while(key[x]) {
long_s[i] = key[x];
++i;
++x;
}
long_s[i] = '\0';
//Serial.print(long_s);
return long_s; //pointer?
}

char lon = combine (key, uri);
char* newURI = &lon;

// A get request
GETrequest getSession(ipaddr, port, hostname, newURI);

最佳答案

您的函数返回值为 char - 这意味着它返回一个单个 char(只能表示一个字符)。字符串由 char 数组表示,通常由指针 (char *) 引用。

因此您需要返回一个 char * - 但这会导致另一个问题。指针必须指向一个比函数调用还长的数组。您的数组 long_s 将在函数返回后立即被销毁,因此这是不合适的。通常的替代方法是允许调用者提供足够大小的缓冲区(另请注意,您的循环可以替换为 strcpy()strcat() 函数):

char *combine(char result[], size_t result_sz, const char key[], const char uri[])
{
/* Test to see if there is sufficient space */

if (strlen(uri) + strlen(key) + 1 > result_sz)
{
return NULL;
}

strcpy(result, uri);
strcat(result, key);

return result;
}

那么你的调用者必须使用:

char lon[1024];
char *newURI = combine (lon, sizeof lon, key, uri);

if (newURI == NULL)
{
/* Error - URL too long */
}
else
{
GETrequest getSession(ipaddr, port, hostname, newURI);
}

关于c - 从 C 中的函数返回一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3497717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com