小编Igo*_*Oks的帖子

我的连接函数mystrcat(char*,char*,char*)有什么问题?

我最近接受采访,要求写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 string

2
推荐指数
3
解决办法
1155
查看次数

我可以依赖嵌套的#includes吗?

可能重复:
C++风格问题:#include是什么?

当我#include是一个头文件,并且我还需要其他文件已经从第一个文件#included时,我应该依赖第一个#include还是我应该#include全部?

我知道它无论如何都会起作用,但我想知道什么是最好的做法.

如果我不依赖,这意味着我可以在我的文件中列出几十个#includes.是否有意义?

c++ include include-path c-preprocessor

2
推荐指数
1
解决办法
1894
查看次数

如何在使用Qt设计器时创建main.cpp?

我是Qt的新手,我在Linux上使用QT 4.4.3.

当我使用Qt Designer设计新的Qt GUI时,是否有办法让它自动创建main.cpp,或者我是否必须手动创建文件并手动将其添加到qmake创建的Makefile中?

c++ qt designer

2
推荐指数
1
解决办法
3987
查看次数

如何处理Perl TCP套接字中的消息碎片?

我在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多次调用(甚至不知道实际的预期长度!).

处理它的最佳方法是什么?

我想到了一些方法:

  1. 也许有一些Perl模块可以处理它?
  2. 也许我可以关闭碎片,但不会导致更多的传输失败?
  3. 我可以将消息长度添加到已发送的消息中,我会打电话recv直到收到整条消息,但这不是很难看吗?
  4. 还要别的吗?

最好的解决方案是什么?

c++ sockets perl tcp communication

2
推荐指数
2
解决办法
739
查看次数

子类的静态成员变量

是否可以在基类中定义静态成员变量,并且具有多个派生类,每个派生类都使用自己的成员变量实例?

下面的代码成功编译,并输出正确的输出,但我仍然不确定做这样的事情是一个好习惯.在下面的示例中,如果我只显式定义了一个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++ inheritance static

1
推荐指数
1
解决办法
585
查看次数

C++多维数据处理

很多时候,我发现自己必须为多维数据定义一个容器.

让我们举一个例子:我有很多芯片,每个芯片有很多寄存器,每个寄存器有很多单元,每个单元有很多晶体管.

在我的C++程序的某个阶段,我必须阅读这些数据,后来我必须使用它.

我不能为这些数据使用任何外部存储:文件,数据库等.

那么,我应该创建一些多维STL容器吗?矢量地图或类似的地图......?

或者我应该为每个人创建类(结构)?包含Transistors矢量的Cell类,然后是包含Cells矢量的Register类等?但是如果以后我想通过晶体管而不是芯片访问我的数据呢?

还有其他方法吗?

谢谢

编辑:忘记提及:我不能使用提升.

c++ oop containers stl

1
推荐指数
1
解决办法
2271
查看次数

如何在Perl中获取目录中的所有文件,而不是子目录中的所有文件?

如何-M在目录列表中找到符合特定条件(修改年龄,以天为单位)的所有文件,但不能在其子目录中找到?

我想使用File :: Find,但看起来它总是会转到子目录.

perl file find

1
推荐指数
1
解决办法
332
查看次数

如何解决在C++中一起使用RAII代码和非RAII代码的问题?

我们有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)

c++ dll singleton static raii

1
推荐指数
2
解决办法
578
查看次数

关于auto_ptr :: reset的问题

请任何人从C++参考网站解释这段代码:

#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++ pointers smart-pointers auto-ptr

1
推荐指数
1
解决办法
1837
查看次数

如何管理浮动的递归返回?

我正在编写一个用于改进递归函数学习的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)

c recursion function

1
推荐指数
1
解决办法
483
查看次数