小编Vis*_*was的帖子

错误:在 { } 中将“194”从“int”转换为“char”的范围缩小

我正在尝试为相关项目编译eSpeak,但在运行 make 命令后出现此错误。

tr_languages.cpp:201:43: error: narrowing conversion of ‘194’ from 
‘int’ to ‘char’ inside { } [-Wnarrowing]
const char string_ordinal[] = {0xc2,0xba,0};  // masculine ordinal 
character, UTF-8
                                       ^
tr_languages.cpp:201:43: error: narrowing conversion of ‘186’ from     
‘int’ to ‘char’ inside { } [-Wnarrowing]
Makefile:102: recipe for target 'tr_languages.o' failed
make: *** [tr_languages.o] Error 1
Run Code Online (Sandbox Code Playgroud)

我搜索了一下,似乎这里的声明

const char string_ordinal[] = {0xc2,0xba,0}; 
Run Code Online (Sandbox Code Playgroud)

本来应该

const signed char string_ordinal[] = {0xc2,0xba,0}; 
Run Code Online (Sandbox Code Playgroud)

既然源代码改动很大,有没有其他办法编译成功?

我正在使用 gcc 版本 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12)

c++ espeak

5
推荐指数
0
解决办法
4577
查看次数

为什么printf(inputString)是一个安全漏洞?

我在Quora上读到一个答案,我遇到了一些简单的事情:

char* inputString;
printf(inputString);
Run Code Online (Sandbox Code Playgroud)

是一个安全漏洞.

我假设inputString不是简单的未初始化,而是在两个语句之间用一些外部输入初始化.

如何准确,这是一个安全漏洞?

Quora的原始答案在这里:

如果C和C++提供最佳性能,为什么我们仍然使用其他语言编写代码?

但它没有为此声明提供额外的背景信息.

c c++ printf pointers

0
推荐指数
2
解决办法
962
查看次数

标签 统计

c++ ×2

c ×1

espeak ×1

pointers ×1

printf ×1