Tag: 函数

在c中返回可变长度字符串的最佳实践

我有一个字符串函数,它接受指向源字符串的指针并返回指向目标字符串的指针。 这个function目前有效,但我担心我没有遵循重新编写malloc,realloc和free的最佳实践。 与我的函数不同的是,目标字符串的长度与源字符串不同,因此必须在我的函数内调用realloc()。 我从查看文档中了解到…… http://www.cplusplus.com/reference/cstdlib/realloc/ realloc后内存地址可能会改变。 这意味着我不能像C程序员那样“通过引用传递”其他函数,我必须返回新的指针。 所以我的function原型是: //decode a uri encoded string char *net_uri_to_text(char *); 我不喜欢我这样做的方式,因为我必须在运行函数后释放指针: char * chr_output = net_uri_to_text(“testing123%5a%5b%5cabc”); printf(“%s\n”, chr_output); //testing123Z[\abc free(chr_output); 这意味着在我的函数内部调用malloc()和realloc(),在函数外部调用free()。 我有高级语言的背景,(perl,plpgsql,bash)所以我的本能是对这些东西的正确封装,但这可能不是C中的最佳实践。 问题:我的方式是最佳实践,还是我应该采用更好的方法? 完整的例子 在未使用的argc和argv参数上编译并运行两个警告,您可以安全地忽略这两个警告。 example.c: #include #include #include char *net_uri_to_text(char *); int main(int argc, char ** argv) { char * chr_input = “testing123%5a%5b%5cabc”; char * chr_output = net_uri_to_text(chr_input); […]

如何在C中用用户输入来创建字符串函数?

我知道如何使用int,double,float和内部用户输入来创建函数(我当前正在使用scanf)。 int getData(){ int a; scanf(“%i”,&a); return a; } 但如何使用字符串类型和用户输入内部函数,然后我们返回类型字符串的值?

C / C ++后增量/ -decrement和函数调用

可能重复: 未定义的行为和序列点 我正在使用microsoft visual c ++。 请看以下示例: int n = 5; char *str = new char[32]; strcpy(str, “hello world”); memcpy(&str[n], &str[n+1], 6+n–); printf(str); // output is “hell world” 所以不可思议的是,我的编译器生成的代码首先递减n然后执行memcpy。 以下来源将完成我预期会发生的事情: int n = 5; char *str = new char[32]; strcpy(str, “hello world”); memcpy(&str[n], &str[n+1], 6+n); n–; printf(str); // output is “helloworld” 首先,我试着向自己解释一下。 最后一个参数首先被压入堆栈,因此可以先对其进行求值。 但我真的相信后递增/递减保证在下一个分号后进行评估。 所以我运行了以下测试: […]

Objective-c:在方法中访问可变参数

可能重复: 如何在Objective-C中创建变量参数方法 Objective C中可变数量的方法参数 – 需要一个例子 以下是具有可变参数的方法的示例。 – (void)numberOfParameters:group,… { NSLog(@”%@”,group); } 在上面的方法中,我知道访问第一个可变参数。 你能帮助我访问其他人吗? 我正在阅读ObjC.pdf并且我正在阅读第35页,行号是4

getline()函数如何在这里工作?

我不明白函数getline是如何在这里工作的。 为什么换行字符被排除在for循环之外?为什么它在单独的块中测试换行符的存在? #include #define MAXLINE 1000 /* maximum input line length */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* print the longest input line */ main() { int len; /* current line length */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char […]

在ASM中,c编译器如何处理函数的结构返回值

在谈到C函数的返回值时,返回值存储在EAX寄存器中。 假设我们正在谈论32位寄存器,欢迎整数,但是当我们返回这些类型时会发生什么: long long , long double ,一个大于32位的struct / union 。

函数原型声明

我正在练习c中的function并且遇到了程序…. #include int main() { float a=15.5; char ch =’C’; printit(a,ch); return 0; } printit(a,ch) { printf(“%f\n%c”,a,ch); } 我想知道为什么上面的程序编译而不是给出我迄今为止所理解的错误是…… 必须使用特定原型声明c中的函数(但此程序不包含原型) 为什么程序给char变量输出’x’? c中的函数是否能够接受该值而不被声明参数中的类型,如函数声明中所做的那样?

如何从Delphi中生成的DLL导入函数?

你能告诉我如何在我的C程序中使用以下function吗? Delphi DLL – 导出的函数: function GetCPUID (CpuCore: byte): ShortString; stdcall; function GetPartitionID(Partition : PChar): ShortString; stdcall; 我没有该DLL的源代码,所以我必须使我的C程序适应该DLL,而不是相反。 我执行以下操作并得到错误 typedef char* (_stdcall *GETCPUID)(BYTE); typedef char* (_stdcall *GETPID)(PCHAR); GETCPUID pGetSerial; GETPID pGetPID HMODULE hWtsLib = LoadLibrary(“HardwareIDExtractor.dll”); if (hWtsLib){ pGetSerial = (GETCPUID)GetProcAddress(hWtsLib, “GetCPUID”); char *str = (char*) malloc(1024); str = pGetSerial((BYTE)”1″); pGetPID= (GETPID )GetProcAddress(hWtsLib, “GetPartitionID”); char *str1 […]

如何从C中的IPv4地址获取主机名?

我需要一个简单的函数,在给定char* IPAddress输出char* hostname 。 任何想法或提示? 另外,从主机名获取IP地址的最简单方法是gethostbyname()和inet_ntoa()是正确的吗?

x的冲突类型和先前的声明在这里……什么?

当我有时间的时候,我一直在教自己C几个月,我遇到了一个问题,我不知道如何修复。 具体来说,当我尝试使用gcc编译它时,我得到: geometry.c:8:错误:’trapezoid’的冲突类型 geometry.c:7:注意:之前的’trapezoid’声明就在这里 geometry.c:48:错误:’trapezoid’的冲突类型 geometry.c:7:注意:之前的’trapezoid’声明就在这里 geometry.c:119:错误:’trapezoid_area’的冲突类型 geometry.c:59:注意:’trapezoid_area’的先前隐式声明就在这里 geometry.c:在函数’cone_volume’中: geometry.c:128:error:被叫对象’3.14100000000000001421085471520200371742248535156e + 0’不是函数 geometry.c:在函数’cylinder_volume’中: geometry.c:136:错误:被叫对象’3.14100000000000001421085471520200371742248535156e + 0’不是函数 现在,我想我可能需要对这些function进行类型转换,但我不确定。 看起来它想要读取PI,我将其定义为3.141,作为一个函数。 有没有办法可以避免使用魔法数字3.141(虽然它比其他数字少得多)? //Geometric formulae #include #include #define PI 3.141 float trapezoid(float b1, float b2, float h); int trapezoid(); float sphere_volume(float r); int sphere(); float cone_volume(float r, float h); int cone(); float pyramid_volume(float b, float h); int pyramid(); float […]