小编Dev*_*lar的帖子

如何检查文件中的制表符?

我想检查一些文件中是否存在制表符(ASCII 0x09).(断言我的源在将它们提交到存储库之前是无选项卡的.)

最好使用标准工具.当然,grep会浮现在脑海中,但显然grep "\t" file.txt不符合......?!?

我知道答案可能很简单,但我很茫然.

shell grep

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

无法在gdb上调试lInux

我正在尝试使用gdb调试Linux,我使用"使用调试信息编译内核"编译内核.一旦内核编译我试图给GDB文件vmlinux(运行上面的命令给我下面的错误)

 GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1


Reading symbols from file...(no debugging symbols found)...done.
"/home/Linux/vmlinux" is not a core dump: File format not recognized
Run Code Online (Sandbox Code Playgroud)

即使我正在设置调试控制器它给我"没有找到调试符号"

c gdb

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

了解Bash短路

首先,我不是Bash职业选手.我发现了几个月前,如果我同时使用&&,并||在大括号序列短路运营商,然后在情况下,第一个语句与真实值退出,如果在真正的块中的最后一条语句退出非零,那么失败块也将被执行.像这样:

returnNumber 0 && {
    echo 'OK'
    returnNumber 1
} || {
    echo 'NG'
}
Run Code Online (Sandbox Code Playgroud)

将输出:

OK
NG
Run Code Online (Sandbox Code Playgroud)

所以,我为此寻找了最简单的解决方案,并想出了这个:

returnNumber 0 && {
    echo 'OK'
    returnNumber 1
    :
} || {
    echo 'NG'
}
Run Code Online (Sandbox Code Playgroud)

我知道,很容易遗漏内置的冒号,但它是一种解决方法的正确方法吗?

linux bash short-circuiting

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

将字符串分配给 char 指针是有效的,但将整数分配给 int 指针在 C 中无效。为什么?

可以为字符指针分配任意字符串,但不能为整数指针分配整数。由于它们都是指针并包含地址。为什么在动态分配之前将 C 中的字符串分配给指针有效但整数无效。

#include<stdio.h>

int main()
{
        char *s = "sample_string"; // valid
        printf("%s\n", s);
        int *p = (int)5; // invalid
        printf("%d\n", *p);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

sample_string
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

背后的原因是什么?虽然它们在 C++ 中都是无效的。

c pointers character dynamic-memory-allocation

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

完美转发c++

这是正确的使用方法吗std::forward

struct Command {
public:
  int32_t uniqueID{0};

public:
  Command() = default;
  
  template<typename T>
  Command(T&& _uniqueID) : uniqueID(std::forward<int32_t>(_uniqueID)) //
  {
    //
  }
};
Run Code Online (Sandbox Code Playgroud)

或者我应该使用这条线?

Command(T&& _uniqueID) : uniqueID(std::forward<T>(_uniqueID))
Run Code Online (Sandbox Code Playgroud)

c++

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

如果我在此C程序中输入一个大于16383的值,将十进制转换为二进制,则它不起作用.为什么?

这是一个十进制到二进制的转换器,用户输入一个十进制数,并输出其二进制版本.它工作正常,除非输入数字(在此代码中显示为变量'a')大于16383.我不太清楚为什么.另一个奇怪的事情是,当16383用作输入数字时,二进制输出只是1的长序列.不确定这是否是答案的线索.

无论如何,这是代码:

#include<stdio.h>
#include<conio.h>

void main()
{
  clrscr();
  int a,x=1;

  printf("Enter your number in base 10:");
  scanf("%d",&a);//max value:16383 for some reason??

  while(x<=a)
  {
    x=x*2;
  }

  x=x/2;
  printf("\nBinary version:");

  if(x==1)
    printf("1");
  else
  {
    while(x>=1)
    {
      if(a/x==1)
      {
        printf("1");
        a=a-x;
      }
      else
        printf("0");

      x=x/2;
    }
  }

  getch();
}
Run Code Online (Sandbox Code Playgroud)

c memory variables binary

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

调用strcpy后,第二个char数组变空

这是我程序中的函数原型:
void FindRepStr(char str[], const char findStr[], const char replaceStr[]);

它发现findStr[]str[]与更换replaceStr[].

这是我的代码:

void FindRepStr(char str[], const char findStr[], const char replaceStr[])
{
  char *s = nullptr;
  s = strstr(str,findStr); //s points to the first-time appear in str

  char tmp[] ="";

  //length equal
  if(strlen(findStr)==strlen(replaceStr))
  {
    for(int i=0;i<strlen(findStr);i++)
    {
        if(replaceStr[i]=='\0' || s[i] =='\0')
         break;
        else
            s[i] = replaceStr[i];
    }

    cout<<str<<endl;
  }

  else
  {
  //find shorter than replace
    if(strlen(findStr)<strlen(replaceStr))
    {
        //!!!problem here!!!
        strncpy(tmp,s,strlen(s)+1); // store the left …
Run Code Online (Sandbox Code Playgroud)

c++ strcpy strncpy

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

在C++中使用哪个函数将多个单词作为输入,比如C中的fgets?

每个人我都是学习计算机科学的初学者,现在我已经学习了一些C语言的基础知识.

在C语言中,我们可以使用fgets多个单词作为输入.采用这种类型的输入的C++等效函数是什么?

c++ string io

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

创建处理器

这是我在大学的最后一个学期,副课叫做微处理器的体系结构和编程,教授写了这段代码,我只是无法理解他在做什么。尤其是有面具的部分。这是代码。谁能帮我理解一下吗?

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>


uint32_t Instruction_Memory[0x2000];
uint32_t PC = 0;

uint32_t Registers[32];

uint32_t Data_Memory[0x3000];

uint32_t get_instruction(uint32_t input){
   uint32_t temp = input/4;
   return Instruction_Memory[temp];
}

void print_registers() {
   for (int i = 0; i < 4; i++) {
       for (int j = 0; j < 8; j++) {
           printf("x%d: %x \t", i*8+j, Registers[i*8+j]);
       }
       printf("\n");
   };
};

uint32_t get_bits(uint32_t input, int start, int numberOfBits){
   uint32_t t4 = input >> start;
   uint32_t mask = (1 << numberOfBits) - 1; …
Run Code Online (Sandbox Code Playgroud)

c cpu processor cpu-architecture microprocessors

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

在程序变得低效之前,允许多少 new[] 和 delete[] 分配有限制吗?

我不确定以前是否有人问过这个问题,所以我会试一试。

我有用于加载大客户列表(20 万个客户)的代码。每个客户端都存储在一个(当前)固定大小的结构中,其中包含他的姓名、地址和电话号码,如下所示:

struct client {
    char name[80];
    char address[80];
    char phonenumber[80];
};
Run Code Online (Sandbox Code Playgroud)

如您所见,该结构的大小为 240 字节。因此,200k 客户端将占用 48MB 内存。显然,这种结构的优点是易于管理并为回收客户创建“免费列表”。但是,如果明天我需要加载 5M 客户端,那么这将增长到 1.2Gb 的 RAM。

现在,显然在大多数情况下,客户的姓名、地址和电话号码占用的空间远少于 80 个字节,因此我想到使用如下结构代替上述结构:

struct client {
    char *name;
    char *address;
    char *phonenumber;
};
Run Code Online (Sandbox Code Playgroud)

然后让 *name、*address 和 *phonenumber 指向以确切所需大小动态分配的结构,用于存储每个信息。

然而,我确实怀疑,随着更多客户端以这种方式加载,它会大大增加所需的 new[] 和 delete[] 分配的数量,我的问题是这是否会在某些时候损害性能,例如,如果我想突然删除 1M 客户端中的 500k 并用 350k 不同客户端替换它们?

我怀疑在我分配了 1M 个“可变长度”小缓冲区之后,如果我“删除”其中的许多缓冲区,然后想要创建新的分配来回收已删除的那些,是否会导致分配器的一些开销找到他们?

c++ memory

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