相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果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)

为什么会这样呢?

c malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

如何连接std :: string和int?

我认为这很简单,但它存在一些困难.如果我有

std::string name = "John";
int age = 21;
Run Code Online (Sandbox Code Playgroud)

如何组合它们以获得单个字符串"John21"

c++ int concatenation stdstring

631
推荐指数
16
解决办法
61万
查看次数

如何在C中将int转换为字符串?

如何将int(整数)转换为字符串?我正在尝试创建一个函数,将a的数据struct转换为字符串以将其保存在文件中.

c string integer

191
推荐指数
8
解决办法
60万
查看次数

如何避免在信号处理程序中使用printf?

由于printf不是可重入的,因此在信号处理程序中使用它并不安全.但我已经看到很多使用printf这种方式的示例代码.

所以我的问题是:我们何时需要避免printf在信号处理程序中使用,是否有推荐的替代品?

c linux signals

80
推荐指数
4
解决办法
3万
查看次数

使用write或async-safe函数从信号处理程序中打印int

我想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)

c signals async-safe

14
推荐指数
1
解决办法
7671
查看次数

检查系统是否实现了某个功能

我正在创建一个跨系统的应用程序.例如,它使用的功能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函数是否已预先实现,如果没有,请实现它?或者只是简单地实现一个功能?

c cross-platform function

9
推荐指数
2
解决办法
410
查看次数

使用除8,10和16以外的基数的ostream

我有一个多项式类,它的自然表示是它的系数.如果设置了系数,那么其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?

c++ base ostream

7
推荐指数
1
解决办法
95
查看次数

C:将数字转换为没有区域设置的字符串的可移植/安全(线程感知)方法是什么?

将数字转换为字符串的安全/可移植方式是什么(反之亦然)?

我在Linux上,我的设置区域设置是这样的,当我使用sprintf时,数字有","而不是"." 作为分隔符.

有时我想要那样,有时候不是:)

我看到了一些暗示玩用户设置的解决方案.显然,这是不应该做的事情.有人建议使用uselocale

snprintf:简单的强制方式.作为基数?

可以有人详细说明(看起来它在一些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 locale glibc

5
推荐指数
1
解决办法
866
查看次数

如何在 C 中使用 write() 函数写入整数?

我是 C 菜鸟,尝试使用write()函数来显示整数。

这是我的代码:

int n = 7;
write(1, &n, 4);
Run Code Online (Sandbox Code Playgroud)

我想显示7,但是当我设置为一个大数字时,程序不显示任何内容或其他奇怪的字符n

我缺少什么?

c command integer

2
推荐指数
1
解决办法
3万
查看次数