首先让我向SO社区道歉,告诉你一些应该是如此微不足道的东西.但是我整天都在这里,而且我已经走到了尽头.
我的程序中有一部分需要从输入流中提取文本,以及使用Runtime.getrunTime().exec()启动的进程的错误流,并以有序的方式将其传递给标准输入和输出.我有一个功能,因为我可以告诉应该工作.但它似乎陷入了陷阱 - 它正在等待流报告准备好 - 但流已经完成并且没有报告.我很困惑.我想不出另一种方法可以做到这符合我的约束,而我更加怀疑这样的捕获22可以存在.
这是我的代码:
private void forwardStreamtoStd(InputStream in, InputStream err)
throws IOException {
int c = -1;
BufferedReader inReader = new BufferedReader(
new InputStreamReader(in, "US-ASCII"));
BufferedReader errReader = new BufferedReader(
new InputStreamReader(err, "US-ASCII"));
boolean inFinished = false, errFinished = false;
try {
System.out.println("Begin stream read loop...");
while (!inFinished && !errFinished) {
if (!inFinished) {
while (inReader.ready()) {
if ((c = inReader.read()) == -1) {
inFinished = true;
}
else {
System.out.print((char) c);
}
}
}
if (!errFinished) …Run Code Online (Sandbox Code Playgroud) 在C++中从字符串中检索unsigned long的最安全和最好的方法是什么?
我知道一些可能的方法.
首先,转换从atol获取的签名长.
char *myStr; // Initalized to some value somehow.
unsigned long n = ((unsigned)atol(myStr));
Run Code Online (Sandbox Code Playgroud)
这个问题的一个明显问题是,当myStr中存储的值大于signed long可以包含的值时会发生什么?atol检索什么?
下一个可能性是使用strtoul.
char *myStr; // Initalized to some value somehow.
unsigned long n = strtoul(myStr, 0, 10);
Run Code Online (Sandbox Code Playgroud)
但是,这对我的需求来说有点复杂.我想要一个简单的函数,字符串输入,unsigned long base 10 out.此外,错误处理还有很多不足之处.
我发现的最后一种可能性是使用sscanf.
char *myStr; // Initalized to some value somehow.
unsigned long n = 0;
if(sscanf(myStr, "%lu", n) != 1) {
//do some error handling
}
Run Code Online (Sandbox Code Playgroud)
同样,错误处理还有很多不足之处,而且比我想要的要复杂得多.
剩下的显而易见的选择是编写我自己的一个包装器,围绕一个先前的可能性或一些循环通过字符串并手动转换每个数字直到它达到ULONG_MAX.
我的问题是,我的google-fu未能找到的其他选项是什么?C++ std库中的任何东西都会将字符串干净地转换为unsigned long并在失败时抛出异常?
如果这是一个骗局,我道歉,但我找不到任何与我完全匹配的问题.
JavaScript中有与C函数相当的东西strncmp吗? strncmp需要两个字符串参数和一个整数length参数.它会将两个字符串与length字符进行比较,并确定它们是否相等length.
JavaScript是否具有等效的内置函数?
基本上,我遇到了同样的问题按照海报上这个问题.我的数据库已正确初始化.我试着做数据库和会话都SaveHandler的初始化中application.ini,并在Bootstrap.无论我怎么做,结果都一样.
这是application.ini初始化的样子:
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "uname"
resources.db.params.password = "******"
resources.db.params.dbname = "dbname"
resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
resources.session.saveHandler.options.name = "sessions"
resources.session.saveHandler.options.primary = "sessionID"
resources.session.saveHandler.options.modifiedColumn = "lastModifiedTime"
resources.session.saveHandler.options.dataColumn = "data"
resources.session.saveHandler.options.lifetimeColumn = "lifetime"
Run Code Online (Sandbox Code Playgroud)
以下是Bootstrap初始化的样子:
protected function _initSession() {
$db = Zend_Db::factory('Pdo_Mysql', array(
'host' =>'localhost',
'username' => 'uname',
'password' => '******',
'dbname' => 'dbname'
));
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$sessionConfig = array(
'name' => 'sessions',
'primary' => 'sessionID',
'modifiedColumn' => 'lastModifiedTime',
'dataColumn' => 'data', …Run Code Online (Sandbox Code Playgroud) 我有一个表单,其中onkeyup触发为某些字段创建建议框.我可以捕获向上箭头,向下箭头和转义的击键,并相应地使用它们在建议框中移动或关闭它.我想使用enter将他们的选择移动到触发建议的输入字段.但是,我似乎无法捕获输入击键.
控件永远不会进入我的javascript建议功能.相反,表格只是提交.我已经尝试了在输入时返回false的noEnter函数传递给onkeypress和onkeydown用于有问题的输入元素,没有骰子.该表单似乎从所有输入事件处理程序中获取控制权,并在其中任何一个可以执行任何操作之前提交自身.
表单提交是否覆盖字段中的所有其他事件处理程序,或者此处还有其他内容吗?如果确实如此,那有什么办法吗?
这是有问题的元素(删除了一些值):
<input type="text" name="myInput" id="myInputField" size="22" onkeypress="noEnter(event)" onkeyup="suggest(event)" onblur="hideSuggestions()">
Run Code Online (Sandbox Code Playgroud)
这是javascript来捕捉它:
var evnt = (event ? event : window.event);
var key = evnt.keyCode;
if(key == 13) { // Handle Enter
alert("ENTER PRESSED.");
hideSuggestions();
return false;
}
Run Code Online (Sandbox Code Playgroud)
警报永远不会触发.放在函数顶部的警报也不会触发.但是,对于转义键,当我将完全相同的代码放入if检查key == 27警报时.
关于几乎相同的主题还有其他问题,例如:阻止用户通过输入#2来提交表单
但是,我没有使用jquery,我只想阻止enter提交这个字段.但是,各种问题中提到的其他解决方案似乎都不起作用.
EDITTED:解释密钥的设置位置.
$var = 'about/';
$var =~ s/^(.*)\/?$/index.php?action=$1/;
Run Code Online (Sandbox Code Playgroud)
我希望它匹配并替换尾部斜杠.但事实并非如此,我得到了这样的结果:
index.php?action=about/
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我已经尝试将它包装在括号中(\/)?并在括号中包含问号(\/?).不包括前面的正斜杠显然对我没有任何好处.那么当它在那里时,怎么能让它吃掉斜线呢?
我有一个我正在构建的数组:
foreach($items as $item) {
$this->_array[(int)$item->getPosition()] = $item;
}
Run Code Online (Sandbox Code Playgroud)
当我然后运行该数组输出它时,我期望这样:
array (
[0] => item0,
[1] => item1,
[2] => item2,
[3] => item3,
)
Run Code Online (Sandbox Code Playgroud)
但我明白了:
array (
[3] => item3,
[0] => item0,
[2] => item2,
[1] => item1,
)
Run Code Online (Sandbox Code Playgroud)
我只能假设键是设置的顺序.为什么它们不是按顺序出现的?
有没有办法强制数组按数字顺序按键排序?
是否建议创建一个哈希列(唯一键)。当人们查看我的 URL 时,它目前是这样的:
url.com/?id=2134
但是,人们可以查看此内容并对所有内容进行数据挖掘,对吗?是否建议多走 1 个步骤来通过哈希实现这一点?
url.com?id=3fjsdFNHDNSL
谢谢!
这两个:
echo 'Tok: '.$tok.' Strpos: '.strpos($tok, "\"").' length: '.strlen($tok).'<br>';
Run Code Online (Sandbox Code Playgroud)
还有这个:
echo 'Tok: '.$tok.' Strpos: '.strpos($tok, '"').' length: '.strlen($tok).'<br>';
Run Code Online (Sandbox Code Playgroud)
结果如下:
Tok: "fresh Strpos: length: 11
Run Code Online (Sandbox Code Playgroud)
Strpos完全没有找到双引号,它返回false(我用strpos()检查=== false).谁能告诉我这里发生了什么?我找不到文件表明strpos不能处理双引号,为什么不找到它?我没办法.
我有一个数据类型,包含一个集合和一个期望的方法List<? extends MyClass>.数据类型有Set<? extends MyClass>.我需要能够将这些东西移出集合并进入List.它进入列表的顺序无关紧要,它只需要开始跟踪它,以便在显示时可以重新排序.可以说,在数据类型中将Set更改为List是不可能的.
一开始这似乎很容易.创建一个新方法,该方法接受Set而不是List,将其更改为列表,然后将其传递给刚刚接受列表的旧方法.将设置更改为列表会出现问题.
public void setData(Set<? extends MyClass> data) {
List<? extends Myclass> newData = ArrayList< /* What goes here? */ >();
for(ConcordaEntityBean o : data) {
newData.add(o);
}
setData(newData);
}
Run Code Online (Sandbox Code Playgroud)
显然,我不能用通配符实例化一个ArrayList,它会窒息.那时我不知道那种类型.有没有办法从数据中提取类型并将其传递给ArrayList?我可以用它实例化MyClass吗?还有其他方法可以做到这一点吗?
我有三个SQL选择,我需要将其结果加在一起.三个中的两个使用相当复杂的连接.
select sum(field_one) from t_a join t_b on (t_a.bid = t_b.id) where t_b.user_id=:id
select sum(field_two) from t_c join t_d on (t_c.did = t_d.id) where t_d.user_id=:id
select sum(field_three) from t_e where t_e.user_id=:id
Run Code Online (Sandbox Code Playgroud)
我需要的是所有三个值的总和. sum(field_one)+sum(field_two)+sum(field_three).反正有没有在一个声明中这样做?
这是上下文:
$values = $form->getValues();
foreach($values as $key=>$value) {
$obj->{$key} = $value;
}
Run Code Online (Sandbox Code Playgroud)
如果$key是有效密钥,__set($name, $value)则不会被调用.如果$key不是有效密钥,则为.这是我的集合的样子:
public function __set($name, $value) {
$method = 'set' . ucfirst($name);
if(method_exists($method)) {
$this->$method($value);
} else {
throw new RuntimeException('Attempt to access a non-existant property with method ' . $method);
}
}
Run Code Online (Sandbox Code Playgroud)
在该__set($name, $value)方法所属的对象中,所有属性都是私有的并且是下划线的.因此对于关键'名称',将有以下内容:
private $_name;
public function setName($name) {
$this->_name = $name;
return $this;
}
Run Code Online (Sandbox Code Playgroud)
我知道它没有被调用,因为我尝试在之后插入一个异常$method = 'set' . ucfirst($name);.当$name没有引用有效的setter时会触发该异常,但是当它没有引用时就没有被触发.它应该每次都被击中.任何人都知道这里发生了什么?
我有以下ajax调用:
$("#welcome a.close").click(function(e) {
$.ajax({
type: "GET",
url: "/visitors/hide_welcome",
success: function(){
$("#welcome").hide(0);
e.preventDefault();
}
});
});
Run Code Online (Sandbox Code Playgroud)
针对我网站的以下内容:
<div id="welcome">
<h2>Welcome <a class="close" href="Javascript:;"></a></h2>
<div class="left">
</div>
<div class="right">
<div class="loginElement">
</div>
</div>
<div class="clear"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
使用以下代码来回答ajax请求:
<?php
class VisitorsController extends AppController {
function hide_welcome() {
if($this->RequestHandler->isAjax()) {
$this->Session->write('Welcome.hidden', true);
echo 'Success.';
}
else {
echo 'I am, in fact, here.<br>';
$this->autoRender = false;
}
}
}
?>
Run Code Online (Sandbox Code Playgroud)
这很直接.它调用/visitors/hide_welcome设置一个会话变量,注意到它们隐藏了欢迎.但它似乎没有完成.如果我在它的任何一侧发出警报,就像这样:
$("#welcome a.close").click(function(e) {
alert("Begin.");
$.ajax({
type: "GET",
url: "/visitors/hide_welcome",
success: …Run Code Online (Sandbox Code Playgroud)