输出不同——无法理解逻辑
Outputs differing -- can't understand the logic
基本上,我创建了一个数组 'string',其中包含一些值,然后创建另一个数组 ('auxstring'),然后以相反的顺序存储初始数组的所有值。最后我把它们打印出来。
为什么当我按原样执行程序时,我得到的输出是垃圾?但是,如果我在 'string' 数组中放入另一个数字(即:{3,1,1,3,4})它工作正常(输出:43113)。
如果我添加这一行也能正常工作:
"printf("%d\n", sizeof(auxstring));"
就在 for 循环之前。
我确定这是非常基础的东西,但我想了解幕后发生的事情,以及为什么在初始字符串的末尾添加一个数字,或放置 printf,以某种方式输出准确的数字.
谢谢。
#include <stdio.h>
#include <string.h>
int main(void) {
int i=0, j, l;
char string[] = {3,1,1,3};
char auxstring[sizeof(string)];
for (j=(sizeof(auxstring) - 1); j >= auxstring[0]; j--) {
auxstring[j] = string[i];
i++;
}
for (l=0; l < sizeof(auxstring); l++) {
printf("%d",auxstring[l]);
}
return 0;
}
循环条件应该是j >= 0
.
现在您与 auxstring[0]
中的 uninitialized 值进行比较,后者是 indeterminate(并且看起来是随机的)。
for循环中的条件
for (j=(sizeof(auxstring) - 1); j >= auxstring[0]; j--) {
^^^^^^^^^^^^^^^^^^
没有意义,因为至少数组 auxstring
没有初始化。
循环也很复杂,因为它使用两个变量作为索引。
回答变量 i
、j
、l
的类型应该是 size_t
- 运算符返回值的类型 sizeof
。
程序可以这样看
#include <stdio.h>
int main(void)
{
char string[] = { 1, 2, 3, 4 };
char auxstring[sizeof( string )];
const size_t N = sizeof( string );
for ( size_t i = 0; i < N; i++ )
{
auxstring[i] = string[N - i - 1];
}
for ( size_t i = 0; i < N; i++ )
{
printf( "%d", auxstring[i] );
}
return 0;
}
它的输出是
4321
基本上,我创建了一个数组 'string',其中包含一些值,然后创建另一个数组 ('auxstring'),然后以相反的顺序存储初始数组的所有值。最后我把它们打印出来。
为什么当我按原样执行程序时,我得到的输出是垃圾?但是,如果我在 'string' 数组中放入另一个数字(即:{3,1,1,3,4})它工作正常(输出:43113)。
如果我添加这一行也能正常工作:
"printf("%d\n", sizeof(auxstring));"
就在 for 循环之前。
我确定这是非常基础的东西,但我想了解幕后发生的事情,以及为什么在初始字符串的末尾添加一个数字,或放置 printf,以某种方式输出准确的数字.
谢谢。
#include <stdio.h>
#include <string.h>
int main(void) {
int i=0, j, l;
char string[] = {3,1,1,3};
char auxstring[sizeof(string)];
for (j=(sizeof(auxstring) - 1); j >= auxstring[0]; j--) {
auxstring[j] = string[i];
i++;
}
for (l=0; l < sizeof(auxstring); l++) {
printf("%d",auxstring[l]);
}
return 0;
}
循环条件应该是j >= 0
.
现在您与 auxstring[0]
中的 uninitialized 值进行比较,后者是 indeterminate(并且看起来是随机的)。
for循环中的条件
for (j=(sizeof(auxstring) - 1); j >= auxstring[0]; j--) {
^^^^^^^^^^^^^^^^^^
没有意义,因为至少数组 auxstring
没有初始化。
循环也很复杂,因为它使用两个变量作为索引。
回答变量 i
、j
、l
的类型应该是 size_t
- 运算符返回值的类型 sizeof
。
程序可以这样看
#include <stdio.h>
int main(void)
{
char string[] = { 1, 2, 3, 4 };
char auxstring[sizeof( string )];
const size_t N = sizeof( string );
for ( size_t i = 0; i < N; i++ )
{
auxstring[i] = string[N - i - 1];
}
for ( size_t i = 0; i < N; i++ )
{
printf( "%d", auxstring[i] );
}
return 0;
}
它的输出是
4321