读取C中的可变长度字符串用户输入 我试图读取可变长度的用户输入并执行一些操作.问题是我不知道我的字符串有多大.我附加了我尝试的示例代码和输出:输出是:解决方法请不要使用不安全的东西,如scanf或我的个人非喜欢的,gets()–没有办法防止缓冲区溢出这样的事情.您可以使用更安全的输入法,例如:然后,您可以设置最大尺寸,它将检测线路上是否输入了太多数据,同时刷新线路的其余部分,这样就不会影响您的下一次输入操作.您可以使用以下内容进行测试:
理解for循环的退出条件 读完这个帖子PrintanintinbinaryrepresentationusingC后,我有了这个问题在用户注释中,他们发布了for循环,它为位位置分配1或0,以便从intdecimal转换为char*binary.我理解为什么不需要初始值.这是我一直都知道的for循环的语法:我不明白的是’bit–‘如何成为退出条件.请帮助我理解这段代码是如何工作的(我测试了它,它是有效的).谢谢.解决方法在
一个简单的C共享内存程序写在linux上:分段错误 我从共享内存教程中获取了代码.它一直工作,直到我定义了structLOCK并尝试将LOCK而不是char*写入共享内存.有人可以帮我解决导致分段错误的问题吗?解决方法您将向量和字符串放入共享内存中.这两个类都分配自己的内存,这些内存将在任何进程生成分配的地址空间内分配,并在从其他进程访问时产生段错误.您可以尝试指定分配器使用该共享内存,但由于在C03中,分配器被假定为无状态,我不确定它是否可行.考虑一下Boost.Interprocess是如何做到的.
是否可以自定义printf? 我有一些结构,我需要经常打印.现在,我在这个结构体周围使用了一个古典的打印包装这个功能很方便,但也很有限.我不能打印或附加一些文本,而不必制作新的包装.我知道我可以使用va_arg系列来添加或者添加一些文本,但是我觉得我会重新实现.我想知道是否可以为printf写一个自定义函数.我想要写这样的东西:这可能吗?
c – 当printf是变量的地址时,为什么要使用void *? 我在printf()中看到一些使用.如果我想打印一个变量的地址,可以这样做:>我想,&a是一个只是一个整数的地址,对吧?阅读的许多文章都是这样使用的:>%p代表什么?
c – 在程序出口处的printf flush 我有兴趣知道当程序退出时printf()函数的flush如何工作.我们来看下面的代码:在这种情况下,printf()如何管理将其缓冲区刷新到stdout?我想这是平台依赖,所以让我们来看Linux.它可以使用gcc的__attribute__来实现,但是标准库将依赖于编译器.我认为这不是它的工作方式.任何解释或链接到文档是赞赏.谢谢.解决方法当调用exit()时,C运行时将注册atexit()处理程序来刷新标准缓冲区.看这个explanation.
为什么case:总是需要常量表达式,而if()不是? 可能重复,但找不到相同的.假设我有以下C代码:我得到一个案例来检查a是零还是非零.一切都很好使用if-else,我也知道if-else的其他变体来实现这一点.但是问题来自于switch-case,因为它说我们可以在switch-case中实现我们可以在if-else中执行的所有操作.但以下代码失败.另外我知道在上面的代码中反转这个例子,如下所示将工作,我将有我的答案.但问题是,为什么?为什么在案件a:不是有效的情况下?switch-case是一个编译时操作和if()运行时?