Tag: std

C中的函数free()对我不起作用

我一直在尝试使用free()通过malloc()分配的malloc() 。 它的一些结构是免费的,但它们保留了一些它们的方式,它们也与它们的孩子保持联系。 它也永远不会释放二进制树的根(gRootPtr) 。 我正在使用Xcode来查明二叉树使用的内存是否已被释放,并使用if语句。 我用来释放内存的代码: void FreeMemory(InfoDefiner *InfoCarrier) { if ((*InfoCarrier) != NULL) { FreeMemory((&(*InfoCarrier)->left)); FreeMemory((&(*InfoCarrier)->right)); free((*InfoCarrier)); } } 代码我用来查看内存是否已被释放。 if (gRootPtr != NULL) { return 1; } else{ return 0; }

是strtol,strtod不安全吗?

似乎strtol()和strtod()有效地允许(并强制)你在字符串中抛弃constness: #include #include int main() { const char *foo = “Hello, world!”; char *bar; strtol(foo, &bar, 10); // or strtod(foo, &bar); printf(“%d\n”, foo == bar); // prints “1”! they’re equal *bar = ‘X’; // segmentation fault return 0; } 上面,我自己没有演出。 但是, strtol()基本上将我的const char *转换为char *给我,没有任何警告或任何东西。 (事实上​​,它不允许你键入bar作为const char * ,因此强制类型中的不安全更改。)这不是真的很危险吗?

不包括stdlib.h不会产生任何编译错误!

希望这是一个非常简单的问题。 以下是我的C pgm(test.c)。 #include //#include int main (int argc, char *argv[]) { int intValue = atoi(“1”); double doubleValue = atof(“2″); fprintf(stdout,”The intValue is %d and the doubleValue is %g\n”, intValue, doubleValue); return 0; } 请注意,我正在使用stdlib.h中的atoi()和atof(),但我没有包含该头文件。 我编译pgm(gcc test.c)并且没有编译错误! 我运行pgm(./a.out),这是输出,这是错误的。 The intValue is 1 and the doubleValue is 0 现在我包含stdlib.h(通过删除#include之前的注释)并重新编译它并再次运行它。 这次我得到了正确的输出: The intValue is 1 and the […]

我只是想不通strcat

我知道我不应该使用这个function,我不在乎。 上次我检查了strcat的规范时,它说了更新第一个值以及返回相同的内容。 现在,这是一个非常愚蠢的问题,我希望你解释一下,就像你和一个非常愚蠢的人说话一样。 为什么这不起作用? char* foo=”foo”; printf(strcat(foo,”bar”)); 编辑:我不知道char []和char *之间的区别。 我如何分配255个字符的字符串? 编辑2:好的,好的,所以char [number]分配了那么多字节的字符串? 说得通。 谢谢。 编辑3:另外,如何在不声明的情况下使用字符数组? 我会将它作为char [255]进行类型转换吗? 编辑4:strcat((char [256])“foo”,“bar”)返回错误。 我很厌倦C. 编辑5:strcat((char [256])“foo”,(char [])“bar”)也是如此。 编辑5: char[256] foo=”bar”; 真正顺利。 “预期的标识符”

使用fscanf读取线条

嗨,我有一个文件,其中包含以下行: wwa weweweof ewewe wdw: 1 11 ms <1 ms <1 ms 174.78.134.1 2 11 ms <1 ms <1 ms 174.78.134.1 3 5 ms <1 ms <1 ms x58trxd00.abcd.edu.com [143.71.290.42] 4 11 ms <1 ms <1 ms 174.78.134.1 我在用 if(linecount == 8) while( fscanf(fp, “%d %s %s %s %s %s %s”,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8) != EOF ){ printf(“%s”,ch); […]

是否存在strtol等价物,不需要以空字符结尾的字符串?

是否存在类似于strtol的标准C函数,它将采用char *和非空终止字符串的长度? 我知道我可以将字符串复制到以null结尾的区域,但出于效率原因这是不可取的。 谢谢。

strtok坏了吗? 或者只是棘手?

strtok无可救药地被打破了吗? 在关于C语言解析的许多StackOverflow问题中,有人会建议使用strtok ,并且一个常见的答案是不应该使用strtok ,它是绝对无法破解的。 一些海报声称strtok的问题仅限于multithreading问题,并且在单线程环境中是安全的。 什么是正确的答案? 它有用吗? 它无可救药地被打破了吗? 你能举例说明你的答案吗?