在这个问题,有人建议意见,我应该不会投的结果malloc,即
int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)
而不是:
int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?
我认为这很简单,但它存在一些困难.如果我有
std::string name = "John";
int age = 21;
Run Code Online (Sandbox Code Playgroud)
如何组合它们以获得单个字符串"John21"?
如何将int(整数)转换为字符串?我正在尝试创建一个函数,将a的数据struct转换为字符串以将其保存在文件中.
由于printf不是可重入的,因此在信号处理程序中使用它并不安全.但我已经看到很多使用printf这种方式的示例代码.
所以我的问题是:我们何时需要避免printf在信号处理程序中使用,是否有推荐的替代品?
我想write在信号处理程序内使用(或任何异步安全函数)将数字打印到日志或终端中.我宁愿不使用缓冲I/O.
是否有一种简单而推荐的方法可以做到这一点?
例如代替printf,我更喜欢write(或任何asyn安全功能).
void signal_handler(int sig)
{
pid_t pid;
int stat;
int old_errno = errno;
while((pid = waitpid(-1, &stat, WNOHANG)) > 0)
printf("child %d terminated\n", pid);
errno = old_errno;
return;
}
Run Code Online (Sandbox Code Playgroud)
打印字符串很容易.代替printf上面我可以使用(不打印pid):
write(STDOUT_FILENO, "child terminated", 16);
Run Code Online (Sandbox Code Playgroud) 我正在创建一个跨系统的应用程序.例如,它使用的功能itoa是在某些系统上实现的,但不是全部.如果我只提供自己的itoa实现:
header.h:115:13: error: conflicting types for 'itoa'
extern void itoa(int, char[]);
In file included from header.h:2:0,
from file.c:2:0,
c:\path\to\mingw\include\stdlib.h:631:40: note: previous declaration of 'itoa' was here
_CRTIMP __cdecl __MINGW_NOTHROW char* itoa (int, char*, int);
Run Code Online (Sandbox Code Playgroud)
我知道我可以检查宏是否是预定义的,如果没有定义它们:
#ifndef _SOME_MACRO
#define _SOME_MACRO 45
#endif
Run Code Online (Sandbox Code Playgroud)
有没有办法检查C函数是否已预先实现,如果没有,请实现它?或者只是简单地实现一个功能?
我有一个多项式类,它的自然表示是它的系数.如果设置了系数,那么其a 1用于二项式,1或2用于三项式等.例如,在二项式的基础上,X 2 + 1表示为101; 在三项式的基础上,2X 2 + 1表示为201.
该类提供了一个operator<<过载.在内部,该类使用整数数组表示系数.所以我应该能够执行:
ostringstream oss;
for (size_t i=0; i<v.size(); i++)
oss << v[i];
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我不知道如何配置比8,10和16等基地ostream的ios_base提供std::oct,std::dec以及std::hex流行的基地,但我没有看到需要使用什么不常用的基地.而像ios_base上的C++ Reference这样的页面并没有讨论要使用的内容.
如何使用8,10和16以外的基数的ostream?
将数字转换为字符串的安全/可移植方式是什么(反之亦然)?
我在Linux上,我的设置区域设置是这样的,当我使用sprintf时,数字有","而不是"." 作为分隔符.
有时我想要那样,有时候不是:)
我看到了一些暗示玩用户设置的解决方案.显然,这是不应该做的事情.有人建议使用uselocale
可以有人详细说明(看起来它在一些glibc(<2.12)上有问题)并且如果可能的话提供一些示例代码(例如宏SNPRINTF_POSIX).
我试过自己,但我的C技能非常有限.
[编辑]
在写完我的问题后,我在Swisslinux.org上找到了[GO] Skywalker13的代码.有什么想法吗?内存使用情况怎么样?(我需要多次调用此函数)
#define _GNU_SOURCE
#include <locale.h>
#include <stdlib.h>
double
my_atof (const char *nptr)
{
double res;
locale_t new_locale;
new_locale = newlocale (LC_NUMERIC_MASK, "C", NULL);
res = strtod_l (nptr, NULL, new_locale);
freelocale (new_locale);
return res;
}
Run Code Online (Sandbox Code Playgroud) 我是 C 菜鸟,尝试使用write()函数来显示整数。
这是我的代码:
int n = 7;
write(1, &n, 4);
Run Code Online (Sandbox Code Playgroud)
我想显示7,但是当我设置为一个大数字时,程序不显示任何内容或其他奇怪的字符n。
我缺少什么?