我一直在深入研究Linux和C,我很好奇函数是如何存储在内存中的.我有以下功能:
void test(){
printf( "test\n" );
}
Run Code Online (Sandbox Code Playgroud)
很简单.当我在具有此功能的可执行文件上运行objdump时,我得到以下内容:
08048464 <test>:
8048464: 55 push %ebp
8048465: 89 e5 mov %esp,%ebp
8048467: 83 ec 18 sub $0x18,%esp
804846a: b8 20 86 04 08 mov $0x8048620,%eax
804846f: 89 04 24 mov %eax,(%esp)
8048472: e8 11 ff ff ff call 8048388 <printf@plt>
8048477: c9 leave
8048478: c3 ret
Run Code Online (Sandbox Code Playgroud)
一切看起来都正确.有趣的是,当我运行以下代码时:
int main( void ) {
char data[20];
int i;
memset( data, 0, sizeof( data ) );
memcpy( data, test, 20 * sizeof( char ) ); …Run Code Online (Sandbox Code Playgroud) 我正在学习Rust,我有点难过.
我正在尝试为用户提供将输出写入stdout或提供的文件名的选项.
我开始与那正是使用给出的示例代码extra::getopts位于这里.从那里,在do_work函数中,我正在尝试这样做:
use std::io::stdio::stdout;
use std::io::buffered::BufferedWriter;
fn do_work( input: &str, out: Option<~str> ) {
println!( "Input: {}", input );
println!( "Output: {}", match out {
Some(x) => x,
None => ~"Using stdout"
} );
let out_writer = BufferedWriter::new( match out {
// I know that unwrap is frowned upon,
// but for now I don't want to deal with the Option.
Some(x) => File::create( &Path::new( x ) ).unwrap(),
None => stdout()
} ); …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的小代码片段来响应箭头按键.我知道up由^ [[A表示,我有以下代码检查该序列:
while( 1 )
{
input_char = fgetc( stdin );
if( input_char == EOF || input_char == '\n' )
{
break;
}
/* Escape sequence */
if( input_char == 27 )
{
input_char = getc( stdin );
if( input_char == '[' )
{
switch( getc( stdin ) )
{
case 'A':
printf("Move up\n");
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
每当我点击"向上"时,转义序列(^ [[A]显示在屏幕上,但"上移"直到我按下回车才出现.
最终目标是用其他一些数据替换当前行上的文本,所以我试着这样做
printf("\r%s", "New Text");
Run Code Online (Sandbox Code Playgroud)
取代"向上移动",但在按下输入后仍然不会显示.
我在读字的方式有问题吗?
谢谢!
编辑快速注释,它适用于*nix系统.
解决方案 感谢大家的指点.我选择了stepanbujnak的解决方案,因为它非常简单.我注意到的一件事是修改字符串(退格等)的键的很多行为与你期望的不同.它会在线上退出任何东西(包括printf'd的东西),我不得不考虑到这一点.在那之后,让其他人排成一行并不太糟糕:)
"别名"可能是错误的单词,因为它在将列/表名称引用为查询中的其他内容时使用.
我感兴趣的是,如果有一种方法可以在数据库中为列提供两个名称.如果我打印这样的表,它看起来像这样:
mysql> SELECT * FROM User;
+--------------------------+-----------------+
| id | username | uname | password | pswd |
+----+---------------------+-----------------+
| 0 | bob_jones@gmail.com | some_pw_hash |
| 1 | sue_smith@gmail.com | some_pw_hash |
+--------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
在这种情况下,username并且uname在查询语句中将是同义词,就像password和pswd.
所以以下语句将具有相同的输出:
mysql> SELECT id, username FROM User;
...
mysql> SELECT id, uname FROM User;
...
Run Code Online (Sandbox Code Playgroud)
我想避免做类似的事情
mysql> SELECT id, username AS uname FROM User;
Run Code Online (Sandbox Code Playgroud)
那么,这样的功能是否存在?
干杯,尼尔