相关疑难解决方法(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万
查看次数

为什么在写入用"char*s"而不是"char s []"初始化的字符串时会出现分段错误?

以下代码在第2行接收seg错误:

char *str = "string";
str[0] = 'z';  // could be also written as *str = 'z'
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

虽然这非常有效:

char str[] = "string";
str[0] = 'z';
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

经过MSVC和GCC测试.

c c-strings segmentation-fault

277
推荐指数
10
解决办法
7万
查看次数

stdout行默认是缓冲,无缓冲还是不确定?

7.9.13/7c99规定:

在程序启动时,预定义了三个文本流,无需明确打开 - 标准输入(用于读取传统输入),标准输出(用于写入常规输出)和标准错误(用于写入诊断输出).

最初打开时,标准错误流未完全缓冲; 当且仅当可以确定流不参考交互设备时,标准输入和标准输出流被完全缓冲.

这是有道理的.如果您将标准输出推送到文件,则需要将其完全缓冲以提高效率.

但是,当你无法确定设备是非交互式的(即正常输出到终端)时,我在标准中没有提到输出是线路缓冲还是无缓冲.

我问的原因是我在这里回答我应该fflush(stdout);在两个陈述之间插入一个:

printf ("Enter number> ");
// fflush (stdout); needed ?
if (fgets (buff, sizeof(buff), stdin) == NULL) { ... }
Run Code Online (Sandbox Code Playgroud)

因为我没有printf用换行符终止.任何人都可以清除这个吗?

stdout c99 buffered

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

标签 统计

c ×2

buffered ×1

c-strings ×1

c99 ×1

casting ×1

malloc ×1

segmentation-fault ×1

stdout ×1