【发布时间】:2020-08-28 22:45:34
【问题描述】:
我的任务是创建简单的程序以通过命令 exec() 重新启动自身。 在每个调用程序应该将字符串从键盘分配给全局数组(最多 20 个字符)和 在赋值之前和之后以十六进制形式打印数组的内容。 问题是,在每次调用中,我的输出都在 scanf 之后结束(就好像程序在打印整个输出之前开始重新启动一样)。 示例输出:
HEX:49|4e|49|54
Type sentence:
example
HEX:49|4e|49|54
Type sentence
等等。 有趣的程序只有在输入 END 后才能正确打印出来。
感谢您的任何帮助。
#include <stdio.h>
#include <unistd.h>
#include <string.h>
char global_tab[20] = { "INIT" };
int main ( int argc, char** argv )
{
printf ( "HEX:" );
for ( int i = 0; i < 20; i++ )
{
if ( !global_tab[ i ] ) break;
if ( global_tab[ i + 1 ] ) printf ( "%0x|" , global_tab[ i ] );
else printf ( "%0x" , global_tab[ i ] );
}
printf ( "\nType sentence:\n" );
scanf ( "%s" , global_tab );
printf ( "HEX2:" );
for ( int i = 0; i < 20; i++ )
{
if ( !global_tab[ i ] ) break;
if ( global_tab[ i + 1 ] ) printf ( "%0x|" , global_tab[ i ] );
else printf ( "%0x" , global_tab[ i ] );
}
if ( !strcmp (( const char* ) global_tab , "END." )) return 0;
execve(argv[0], argv, NULL);
return 0;
}
【问题讨论】: