我正在尝试用C++调用另一个应用程序.由于输入文件中的语法错误,嵌入式应用程序会受到分段错误的影响,因此外部程序将负责重新运行内部和记录失败.
我的直接想法是依靠内部程序的返回值.所以我开始尝试这个.我写了一个虚拟程序Inner.cpp:
#include <iostream>
int main()
{
std::cout << "Inner" << std::endl;
return 22;
}
Run Code Online (Sandbox Code Playgroud)
然后,我写了这个Outer.cpp:
#include <cstdlib>
#include <iostream>
int main()
{
int retval = system("~/Inner");
std::cout << "Returned: " << retval << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
得到这个令人困惑的输出:
Inner
Returned: 5632
Run Code Online (Sandbox Code Playgroud)
所以我开始阅读.我很快发现,只有8个LS位通过,这些位经过无符号处理.但这不仅意味着不使用255以上的值吗?为什么我会得到这个奇怪的价值?
所以我开始查看这些内容.
What I expected: 22 -> 0000 0000 0000 0000 0000 0000 0001 0110
What I got: 5632 -> 0000 0000 0000 0000 0001 0110 0000 0000
Run Code Online (Sandbox Code Playgroud)
哇,这是相同的模式,只是转移.事实上,当我修改我的行时:
std::cout << "Returned: " << …Run Code Online (Sandbox Code Playgroud) #include<stdio.h>
#include<string.h>
int main()
{
char buffer[32];
char c;
int i;
printf("input: ");
fgets(buffer, 32, stdin);
printf("items filled: %d\n", sscanf("%c%d\n", &c, &i));
printf("%c%d\n", c, i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当键入一个字符后跟一个数字"f7"时,我希望"f"进入变量c,而"7"进入变量i.出于某种原因,sscanf()无法填充两者,我得到了他们的初始垃圾值.我究竟做错了什么?
wget -q -T 60 --retry-connrefused -t 5 --waitretry=60 --user=ftp2.company.com|company2013 --password=!company2013 -N -P data/parser/company/ ftp://ftp2.company.com/Production/somedata.zip
我在使用此命令时遇到问题,因为密码包含感叹号.我尝试用\来转义,尝试使用单引号,然后输出:
wget: missing URL
要么
bash: !company2013: event not found
这真是令人失望......
这会导致运行时出现序列化异常。这只是一个演示项目,用于测试执行此操作的最佳方法。我包括了主要方法和我试图序列化的类。
忽略:我真的无法添加更多细节,我已经描述了问题,附上了代码,这个“请添加更多细节”的事情是有史以来最愚蠢的事情。让我发一下吧。
Data toSend = new Data();
toSend.Output();
///SERIALIZE
BinaryFormatter formatter = new BinaryFormatter();
Stream streamOut = File.OpenWrite("file");
formatter.Serialize(streamOut, toSend);
streamOut.Close();
Console.WriteLine("----------------------------");
///DESERIALIZE
Stream streamIn = File.OpenRead("file");
Object received = formatter.Deserialize(streamIn);
Data toReceive = (Data)received;
toReceive.Output();
class Data : ISerializable
{
int integerData;
string stringData;
bool booleanData;
int shouldnotbeserialized;
public Data()
{
integerData = 1;
stringData = "Hello";
booleanData = true;
shouldnotbeserialized = 55;
}
//To deserialize
public Data(SerializationInfo info, StreamingContext context)
{
integerData = info.GetInt32("theint");
stringData = info.GetString("thestring");
booleanData …Run Code Online (Sandbox Code Playgroud) 我想知道在这些情况下什么是更好的解决方案,或者编码标准在公司中对此有何评价?
if (this.State == NetworkState.Server)
{
//...
}
else if (this.State == NetworkState.Client)
{
//...
}
else
{
//some error throwing or printing
}
Run Code Online (Sandbox Code Playgroud)
要么
if (this.State == NetworkState.Server)
{
//...
}
else
{
//sure its client here
}
Run Code Online (Sandbox Code Playgroud)
我觉得第一个更具可读性,因为你可以清楚地看到客户端是另一个状态,但它也使代码更长,有时我做的不仅仅是打印"这应该永远不会发生"第三种情况.有没有明确的更好的解决方案?
SELECT * FROM table t
SELECT t.* FROM table t
Run Code Online (Sandbox Code Playgroud)
我尝试了它并产生了相同的结果,但我想确定因为我正在重构使用第二个版本的一段代码,我很惊讶因为它写的时间更长,而且更简单.
这里有隐藏的东西吗?
MySQL版本:5.5.29-0ubuntu0.12.04.2(Ubuntu)