用open()写入之前清除文件

使用fopen ,通过将其设置为w将自动为我清除文件。 但是现在我正试图用open做同样的事情, int file = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); 这不保证文件为空并在开头写(?)。 我怎样才能做到这一点?

用于C的HTML解析器库

我只需要一个建议。 我有一个程序,它采用有效的HTML,并将其保存到文件,我需要一种方法来解析这个html文件,以检索该html文件中记录的每个图像。 (例如/foo/bar.jpg)。 有没有我可以用来实现这个的HTML解析库?

C中的解析错误

我正在做一些按位操作的家庭作业,它说我的代码有一个“解析错误”我假设它的语法或其他东西……但我找不到丢失的分号或任何东西。 你能否发现为什么我可能会遇到这个问题? int isGreater(int x, int y) { int xSign = (x>>31); int ySign = (y>>31); int check1 = (xSign & ySign) | (~xSign & ~ySign); int same = ( x + ((~y) + 1) )>>31; same = !(same & 0x1); int check2 = (check1 & same) | (~check1 & !xSign); int equal = (!(x […]

由于malloc()语法错误导致程序崩溃

struct nouedls { char * path; char * name; struct nouedls * suiv; }; typedef struct nouedls nouedls; typedef nouedls * listes; listes ajouters(listes ls, char * path , char* name) { nouedls * x=malloc(sizeof(x)); listes auxl; x->path=malloc(strlen(path)*sizeof(char)); x->name=malloc(strlen(name)*sizeof(char)); strcpy(x->path,path); strcpy(x->name,name); x->suiv=NULL; if (ls==NULL){ ls=x; } else { auxl=ls; while(auxl->suiv!=NULL) { auxl=auxl->suiv; } auxl->suiv=x; } […]

模块化硬币兑换程序逻辑

我对这个程序的目的是告诉每个面额应该给客户多少硬币,假设输入是5-95。 我已经用最好的模块化forms编写了我的程序,它似乎正在工作。 但是,该程序显示每个面额为0。 问题是什么? void PrintDisplay(void) { printf(“Enter an amount to calculate change: “); return; } int GetChange(void) { int change; scanf(“%d%*c”, &change); return(change); } int GetCoins(int cents, int coin) { int quantity; quantity = cents / coin; return(quantity); } int GetNewChange(int cents, int coin) { int newchange; newchange = cents – coin; return(newchange); } […]

根据字符拆分字符串数组

我有一个与此类似的字符串数组: char* arrStrings[] = {“a”, “be”, “|”, “cgg”, “dss”, “|”, “mmd”, “ddd”, “\0”} 1)我希望能够将其拆分为一组数组,基于“|”的位置 性格是。 分裂后,我会这样: a1 = {“a”, “be”, “\0”} a2 = {“cgg”, “dss”, “\0”} a3 = {“mmd”, “ddd”, “\0”} 2)之后,我需要创建一个包含所有3个数组的链表,如下所示: list = {pointer to a1, pointer to a2, pointer to a3} 我很困惑,因为涉及多个指针级别。 我怎么能做到这一点?

阅读未初始化的内存空间总是不明智吗?

我正在重新创建整个标准C库,我正在为strle n实现一个我希望成为所有其他str函数的基础。 我目前的实施如下: int ft_strlen(char const *str) { int length; length = 0; while(str[length] != ‘\0’ || str[length + 1] == ‘\0’) length++; return length; } 我的问题是,当我通过一个str : char str[6] = “hi!”; 正如所料,内存读取: [‘h’][‘i’][‘!’][‘\0’][‘\0’][‘\0’][‘\0′] 如果你看看我的实现,你可以期望我得到6的回报 – 而不是3(我以前的方法),这样我就可以检查strlen可能包括额外分配的内存。 这里的问题是,我将不得不在初始化内存之外读取1个字节,以便在最后的null终结符处失败我的最后一个循环条件 – 这是我想要的行为。 然而,这通常被认为是不好的做法,并且有些是自动错误。 即使您非常具体地想要读入垃圾值(以确保它不包含’\ 0’),在初始化值之外读取也是一个坏主意吗? 如果是这样,为什么? 我明白那个: “buffer overruns are a favorite avenue for attacking secure programs” […]

在vfork()/ clone()中调用execv()之前的setuid()

我需要从服务器派生一个exec。 由于我的服务器内存占用量很大,我打算使用vfork() / linux clone() 。 我还需要为stdin / stdout / stderr打开管道。 这是clone() / vfork()允许的吗?

像树命令一样的打印线

我正在尝试为工作中的任务学习C编程,我为自己设置了一个小项目,其中包括读取包含所有子目录的文件树,以获取有关每个文件的信息。 我无法解决的问题是如何在打印所有目录时创建行,就像真正的树命令一样。 这是我的示例代码: enum { doSkip, isFile, isDir } testDir(char *path, char *name) { struct stat st_buf; if (strcmp(name, “.”) == 0 || strcmp(name, “..”) == 0) { return doSkip; } stat(path, &st_buf); if (S_ISDIR(st_buf.st_mode)) return isDir; return isFile; } void list(const char *path, int indentlevel) { DIR *dirp = opendir(path); struct dirent *dentry; char […]

printf返回一个字符串

是否有类似printf的函数可以返回字符串而不是打印它? 我有一个以某种颜色打印字符串的函数,但它必须是字符串文字,而不是接受像printf这样的变量。 // Function declaration (Assums YELLOW and NORMAL are the unix constants for terminal colors void pYellow(char *str) { printf(“%s%s%s”, YELLOW, str, NORMAL); } //Function call void pYellow(“This is a string”); 如果我想用变量打印颜色,它就不会起作用。 像pYellow(“Num: %d”, 42); 会出错,因为它的参数太多了。 做pYellow(printf(“String”)); 也不会工作。 TL:DR我想知道是否有一个printf方法返回一个字符串而不是打印它。