【发布时间】:2014-01-18 20:11:59
【问题描述】:
我正在为即将到来的课程学习我的 C 技能,在使用 getchar 构建字符串后,我遇到了 printf 这个奇怪的输出。具体来说,我尝试输出的任何字符串都会在每个字母上附加相同的字符序列。 foo 变成 "f?8@{?o?8@{?o?8@{?" 与 cc 编译,f¿:¿o¿:¿0¿:¿ 与 Apple LLVM 5.0 (Xcode)。以下是说明问题的示例代码:
char * input_buffer = malloc( sizeof( char ) );
char c;
while ( ( c = getchar() ) != '\n' ) {
strcat(input_buffer, &c);
}
// problem output
printf( "\n%s\n", input_buffer );
// foo -> f¿:¿o¿:¿0¿:¿
// weird side effect is the 4 is required to get a proper len
printf("\ncharacters: %lu\n", strlen( input_buffer ) / 4 );
我到处搜索,但在其他任何地方都没有看到这个,但这似乎有点像边缘情况。这是我没有考虑到的某种编码问题吗?
【问题讨论】:
-
你正在通过 malloc 分配单个字符
-
次要:使用
printf("%zu", strlen( input_buffer ) / 4 );。strlen()返回的类型是size_t,size_t和int的二元运算 (/) 将产生size_t。'z'是无符号整数类型size_t的匹配格式规范修饰符。 -
为什么投反对票?在没有解释的情况下投反对票并不是很有帮助。