我已经尝试了几个小时来创建一个程序,通过运行如下命令来输出类似command[/home/nerdofcode/]:
的内容:
printf("Command[", system("pwd"),"]: ");
...
但我收到的问题是,当我输入输入时,它开始在command[...
输入,然后一旦我点击回车,它最终会输出system("pwd");
......
我正在使用system()
函数在Linux上执行系统命令。
答案 0 :(得分:1)
要正确使用printf作为以null结尾的字符串,您需要更改参数:
printf("Command[%s]: ", string_with_result);
为了正确获取string_with_result
,您需要研究system()
在您的环境中的工作方式。它的返回值是特定于实现的,因此不允许使用满足您需要的代码来回答。
char * string_with_result; /* pointer to null-terminated sequence of char */
这是上面提出的printf中使用的字符串结果的声明。
如果您想获得结果,但不坚持使用system()
,请检查此StackOverflow问题并接受答案:
'pwd' to get path to the current file
这个Q / A可能是" unix-ish"实际使用system()
的环境,它使用popen()
:
C: Run a System Command and Get Output?
答案 1 :(得分:1)
printf
无法作为" concat"逗号分隔字符串的操作。它有一个带占位符的格式字符串和占位符的参数。
所以你可以写:
import UIKit;
class LoginScreenViewController: UIViewController {
@IBOutlet weak var loginMenu: UIView!;
override func viewDidLoad() {
super.viewDidLoad();
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillChange(notification:)),
name: .UIKeyboardWillChangeFrame,
object: nil
);
}
override func viewWillDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(self);
}
@objc func keyboardWillChange(notification: Notification) {
let keyboardHeight = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.height;
UIView.animate(withDuration: 0.5, animations: { () -> Void in
self.loginMenu.frame.origin.y = UIScreen.main.bounds.height - keyboardHeight - self.loginMenu.frame.height;
});
}
}
但是下面的代码不会连接两个字符串;它宁愿将char *s1 = "hello", *s2 = "world";
printf("%s %s", s1, s2);
视为格式字符串(没有占位符),也会忽略参数:
s1
进一步注意char *s1 = "hello", *s2 = "world";
printf(s1, s2);
不会返回一个字符串,您可以在int system(const char* cmd)
中使用该字符串。所以我建议写。
printf
只要printf("Command[");
system("pwd");
printf("]: ");
- 命令和您的程序system
stdout`定位到相同的输出流,这应该可以在控制台上运行。