我最近接受采访,要求写mystrcat(*s1, *s2, *s3)在那里s1,并s2在源字符串和串联的结果给出s3.我被告知,不要担心内存分配s3和假设s1,s2并且不是空/无效字符串.所以我写了下面的蹩脚(粗)程序.我被告知有问题s3或出现问题s3.你能告诉它它是什么/可能是什么?
void mystrcat(char *s1, char *s2, char *s3)
{
if (! (s1 || s2 || s3)) return; // one/more pointers are invalid
// copy string s1 into s3
while(*s1) {
*s3 = *s1;
s1++;
s3++;
}
// concatenate string s2 into s3
while(*s2) {
*s3 = *s2;
s2++;
s3++;
}
*s3 = '\0';
}
Run Code Online (Sandbox Code Playgroud)
你能告诉我这里有什么问题吗?做什么会更专业呢?
可能重复:
C++风格问题:#include是什么?
当我#include是一个头文件,并且我还需要其他文件已经从第一个文件#included时,我应该依赖第一个#include还是我应该#include全部?
我知道它无论如何都会起作用,但我想知道什么是最好的做法.
如果我不依赖,这意味着我可以在我的文件中列出几十个#includes.是否有意义?
我是Qt的新手,我在Linux上使用QT 4.4.3.
当我使用Qt Designer设计新的Qt GUI时,是否有办法让它自动创建main.cpp,或者我是否必须手动创建文件并手动将其添加到qmake创建的Makefile中?
我在Perl客户端和C++服务器之间有套接字通信.
Perl代码:
if (!socket(SERVER, AF_INET, SOCK_STREAM, getprotobyname('tcp'))) {
die "Can't allocate socket\n";
} elsif (!connect(SERVER,sockaddr_in($PORT, $tcp_addr))) {
die "Can't connect to server at $tcp_addr port $PORT...\n";
}
SERVER -> autoflush(1);
print SERVER "$line";
Run Code Online (Sandbox Code Playgroud)
如果$line太长了,它就会碎片化,而在C++服务器端我必须recv多次调用(甚至不知道实际的预期长度!).
处理它的最佳方法是什么?
我想到了一些方法:
recv直到收到整条消息,但这不是很难看吗?最好的解决方案是什么?
是否可以在基类中定义静态成员变量,并且具有多个派生类,每个派生类都使用自己的成员变量实例?
下面的代码成功编译,并输出正确的输出,但我仍然不确定做这样的事情是一个好习惯.在下面的示例中,如果我只显式定义了一个s实例(通过调用:string A :: s;),它实际上如何使用2个实例?
class A
{
protected:
void SetS(string new_s){s = new_s;}
void PrintS(){cout << s << endl;};
private:
static string s;
};
class B : public A
{
public:
void foo(){ SetS("bbb"); PrintS();};
};
class C : public A
{
public:
void foo(){ SetS("ccc"); PrintS();};
};
string A::s;
int main()
{
B b;
b.foo(); // results in output: bbb
C c;
c.foo(); // results in output: ccc
b.foo(); // results in output: bbb
}
Run Code Online (Sandbox Code Playgroud) 很多时候,我发现自己必须为多维数据定义一个容器.
让我们举一个例子:我有很多芯片,每个芯片有很多寄存器,每个寄存器有很多单元,每个单元有很多晶体管.
在我的C++程序的某个阶段,我必须阅读这些数据,后来我必须使用它.
我不能为这些数据使用任何外部存储:文件,数据库等.
那么,我应该创建一些多维STL容器吗?矢量地图或类似的地图......?
或者我应该为每个人创建类(结构)?包含Transistors矢量的Cell类,然后是包含Cells矢量的Register类等?但是如果以后我想通过晶体管而不是芯片访问我的数据呢?
还有其他方法吗?
谢谢
编辑:忘记提及:我不能使用提升.
如何-M在目录列表中找到符合特定条件(修改年龄,以天为单位)的所有文件,但不能在其子目录中找到?
我想使用File :: Find,但看起来它总是会转到子目录.
我们有3个不同的库,每个库由不同的开发人员开发,每个库(大概)设计得很好.但是,由于某些库正在使用RAII而某些库没有,并且某些库是动态加载的,而其他库则不是 - 它不起作用.
每个开发人员都说他正在做的事情是正确的,并且仅针对这种情况进行方法改变(例如在B中创建RAII单例)将解决问题,但看起来就像一个丑陋的补丁.
你会如何建议解决这个问题?
请查看代码以了解问题:
我的代码:
static A* Singleton::GetA()
{
static A* pA = NULL;
if (pA == NULL)
{
pA = CreateA();
}
return pA;
}
Singleton::~Singleton() // <-- static object's destructor,
// executed at the unloading of My Dll.
{
if (pA != NULL)
{
DestroyA();
pA = NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
"A"代码(在另一个Dll中,与我的Dll静态链接):
A* CreateA()
{
// Load B Dll library dynamically
// do all other initializations and return A*
}
void DestroyA()
{
DestroyB();
}
Run Code Online (Sandbox Code Playgroud)
"B"代码(在另一个Dll中,从A动态加载):
static …Run Code Online (Sandbox Code Playgroud) #include <iostream>
#include <memory>
using namespace std;
int main () {
auto_ptr<int> p;
p.reset (new int);
*p=5;
cout << *p << endl;
p.reset (new int);
*p=10;
cout << *p << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个用于改进递归函数学习的C代码.我的函数必须计算数组中接收的一组数字的平均值.我必须计算数组中数字的总和,甚至要返回它,同样我要计算函数内部的平均值(我打印过它)但是当我做返回时,main函数总是得到一个垃圾数字.
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
float sum (int array[], int n)
{
float f; float z=n;
if (n==0) return (array[n]);
f=(array[n]+sum(array,n-1));;
return f/z;
}
int main ()
{
int *array, n, i;
float result;
printf("\nDimension de tu array: ");
scanf("%d", &n);
array=(int *) malloc (n*sizeof (int));
for (i=0; i<n; i++)
{
printf("Valor en A[%d]: ", i+1);
scanf("%d", &array[i]);
}
result=sum(array,n);
printf("\n\nEl promedio es igual a: %f ", result);
}
Run Code Online (Sandbox Code Playgroud)