是否可以在函数内部分配数组并使用引用返回它?

我尝试过使用tripple指针,但它仍然失败。 码: #include #include int set(int *** list) { int count, i; printf(“Enter number:\n”); scanf(“%d”, &count); (*list) = (int **) malloc ( sizeof (int) * count); for ( i = 0; i<count;i++ ) { (**list)[count] = 123; } return count; } int main ( int argc, char ** argv ) { int ** list; int […]

用指针编写和读取(fwrite – fread)结构

我正在研究一个邮箱项目,我有这两个结构: struct mmbox_mail struct mmbox_mail { char *sender, *recipient; char *obj, *date; char flags; size_t size; }; 和 mail_t typedef struct{ struct mmbox_mail info; void *body; void *next; } mail_t; 我无法修改结构的字段,因为我需要可变数据(为此我使用char *而不是char [])。 每个mail_t结构都是一封邮件。 我需要将用户的每个邮件保存在一个文件中,可以是二进制文件或文本文件(但我认为使用二进制文件更好,因为我有一个很难用纯文本保存的void*体。 我试图这样做,但似乎它不起作用: while(mailtmp != NULL){ fwrite(mailtmp, sizeof(mail_t), 1, fp); /* next mail */ mailtmp=mailtmp->next; } while(mailtmp != NULL){ /* i have […]

`write(2)`对本地文件系统的primefaces性

显然POSIX说明了这一点 文件描述符或流在其引用的打开文件描述上称为“句柄”; 打开的文件描述可能有几个句柄。 […]应用程序影响第一个句柄上的文件偏移量的所有活动都应暂停,直到它再次成为活动文件句柄。 […]句柄不需要在同一过程中应用这些规则。 – POSIX.1-2008 和 如果两个线程分别调用[write()函数],则每个调用应该看到另一个调用的所有指定效果,或者没有一个。 – POSIX.1-2008 我对此的理解是,当第一个进程发出write(handle, data1, size1)而第二个进程发出write(handle, data2, size2) ,写入可以按任何顺序发生,但data1和data2 必须都是原始的和连续的。 但运行以下代码会给我带来意想不到的结果。 #include #include #include #include #include #include #include die(char *s) { perror(s); abort(); } main() { unsigned char buffer[3]; char *filename = “/tmp/atomic-write.log”; int fd, i, j; pid_t pid; unlink(filename); /* XXX Adding O_APPEND to the flags […]

为长值明确声明L或UL的原因是什么?

从一个例子 unsigned long x = 12345678UL 我们一直都知道编译器需要在上面的例子中只看到“long”来设置4个字节(32位)的内存。 问题是为什么我们应该在长常量中使用L / UL,即使在声明它很长之后也是如此。

关于C ++中名称修改的问题

我正在尝试学习和理解C ++中的名称修改。 以下是一些问题: (1)来自devx 当全局函数被重载时,为每个重载版本生成的受损名称是唯一的。 名称修改也适用于变量。 因此,局部变量和具有相同用户给定名称的全局变量仍然会获得明显的错位名称。 除了重载函数和同名全局变量和局部变量之外,还有其他使用名称修改的示例吗? (2)来自Wiki 需要出现这样的情况:语言允许使用相同的标识符命名不同的实体,只要它们占用不同的命名空间(其中命名空间通常由模块,类或显式命名空间指令定义)。 我不太明白为什么名称修改仅适用于标识符属于不同名称空间的情况,因为重载函数可以在同一名称空间中,同名全局变量和局部变量也可以在同一空间中。 怎么理解这个? 具有相同名称但在不同范围内的变量是否也使用名称修改? (3)C是否有名称错误? 如果没有,那么当一些全局和局部变量具有相同名称时,它如何处理? C没有重载function,对吧? 感谢致敬!

计算ASCII文件中换行符的最简单方法是什么?

获取ASCII文件行的最快方法是哪种?

如何在C中将整数转换为hex字符串?

如何在C中将整数转换为hex字符串? 示例:整数50将转换为hex字符串”32″或”0x32″ 。

使用内联汇编在数组上循环

当使用内联汇编循环数组时,我应该使用寄存器修饰符“r”还是内存修饰符“m”? 让我们考虑一个添加两个浮点数组x和y并将结果写入z的示例。 通常我会使用内在函数这样做 for(int i=0; i<n/4; i++) { __m128 x4 = _mm_load_ps(&x[4*i]); __m128 y4 = _mm_load_ps(&y[4*i]); __m128 s = _mm_add_ps(x4,y4); _mm_store_ps(&z[4*i], s); } 这是我使用寄存器修饰符“r”提出的内联汇编解决方案 void add_asm1(float *x, float *y, float *z, unsigned n) { for(int i=0; i<n; i+=4) { __asm__ __volatile__ ( "movaps (%1,%%rax,4), %%xmm0\n" "addps (%2,%%rax,4), %%xmm0\n" "movaps %%xmm0, (%0,%%rax,4)\n" : : "r" (z), […]

C – 读取命令行参数

我做了很少的程序来计算pi(π)作为一个整体。 现在我面临一个问题如何扩展它以计算积分,这将在启动应用程序时作为额外参数给出。 我如何在程序中处理这样的参数?

在调用toupper(),tolower()等之前,是否需要转换为unsigned char?

不久之前,StackOverflow上有名望的人在评论中写道,在调用std::toupper (和类似的函数)之前,有必要将char -argument转换为unsigned char 。 另一方面,Bjarne Stroustrup没有提到在C ++ – Programming Language中这样做的必要性。 他只是喜欢使用toupper string name = “Niels Stroustrup”; void m3() { string s = name.substr(6,10); // s = “Stroustr up” name.replace(0,5,”nicholas”); // name becomes “nicholas Stroustrup” name[0] = toupper(name[0]); // name becomes “Nicholas Stroustrup” } (引自上述书,第4版。) 该引用表明输入需要表示为unsigned char 。 对我来说,这听起来像每个char都有,因为char和unsigned char具有相同的大小。 那么这个演员是不必要的还是Stroustrup不小心? 编辑: libstdc ++手册提到输入字符必须来自基本源字符集 ,但不会强制转换。 […]