gpt4 book ai didi

C#define 字符串,ai_socktype 不支持 Servname

转载 作者:太空宇宙 更新时间:2023-11-04 08:52:52 28 4
gpt4 key购买 nike

我正在尝试用 C 编写套接字程序。当我这样做时,我的整个代码都可以正常工作

#define PORT "3333"

但不是

#define PORT getParameter("setting.ini","PORT")

基本上,getParameter 只是打开 setting.ini 文件并通读,查找变量及其值,然后返回它。我这样做的唯一原因是因为我不想在我的代码中硬编码端口号。我得到了:

"Servname not supported for ai_socktype"

我不知道是什么导致了这个错误。有任何想法吗?

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

char *substring(char* str, int start, int length) {
char *newString = (char *)malloc(length * sizeof(char)+1);
int i, x = 0;
int end=start+length-1;
for(i = start ; i <= end; i++)
newString[x++] = str[i];
newString[x] = '\0';
return newString;
}

char *getParameter(char *fName, char *pName)
{
FILE *fr;
char line[80];
int i;

fr = fopen (fName, "r"); /* open the file for reading */

while(fgets(line, 80, fr) != NULL)
{
i = strcspn (line,"=");
if(strcmp(pName,substring(line,0,i))==0){
char *value = substring(line,i+1,strlen(line)-i);
fclose(fr);
return value;
}
}
fclose(fr);
}

int main(void){
char *PORT = getParameter("setting.ini","PORT");
const int BACKLOG = atoi(getParameter("setting.ini","BACKLOG"));
printf("%s\n",PORT);
printf("%d\n",BACKLOG);
return 0;
}

最佳答案

我怀疑您的问题与换行有关。当您硬编码时,您的字符串不包含换行符,但是当您使用 fgets() 读取它们时,您解析它们的方式会保留任何尾随 \n .这可能会混淆您将值传递给的任何内容以获取该错误。

除此之外,您的代码中有许多内存泄漏,因为您的 substring() 调用的结果永远不会被释放(并且您甚至没有保留指向它们的指针,因此它们在某些情况下可以释放)。

关于C#define 字符串,ai_socktype 不支持 Servname,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18984770/

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