小编Zhi*_*ang的帖子

使用正则表达式时,Shell'tar:在存档中找不到'错误

当我tar -xzf *.gz用来提取.gz当前目录中的所有文件时,我收到Not found in archive错误.但是,如果我逐个提取或使用for循环,它可以正常工作

for file in `ls *.gz`; do tar -xzf $file; done
Run Code Online (Sandbox Code Playgroud)

这个错误的原因是什么?

linux shell tar

23
推荐指数
3
解决办法
6万
查看次数

cut:我们可以设置多个空格作为分隔符吗?

我有这样的文字:

word1 word2   word3  word4
Run Code Online (Sandbox Code Playgroud)

一对单词之间可能有多个空格,我想从每一行得到一些单词列.当我使用cat file | cut -d ' ' -f1,2,4它时,似乎某些字段是空间,这不是我所期望的.我知道awk可以做到这一点.问题是我们能否cut只做到这一点?也就是说,我们可以设置多个空格作为分隔符cut,但数量是多少?

bash shell cut

8
推荐指数
4
解决办法
7639
查看次数

我们可以在c ++ 11中擦除基于范围的for循环中的项目

我想删除所有项目少于vC++ 11标准容器set,这是我的代码:

void delete_less_than(set<int> & ss, int const v) {
   for (auto item: ss) {
      if (item < v) {
        ss.erase(ss.find(item));
      } else break;
  }  
}
Run Code Online (Sandbox Code Playgroud)

代码是否正常工作?我在我的计算机上似乎没问题(g ++ 4.7.3),但在我提交代码的一些在线判断中无限循环.

c++ c++11

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

在C if-else语句中,是否应该首先出现更可能的条件?

我碰巧写了一个if-else语句,条件在大多数时候都是假的(检查是否分配了静态指针).编译器优化哪一个会更好?或者他们是平等的?该函数将被调用很多次,因此优化其性能至关重要.

void foo() {
  static int * p = NULL;
  if (p == NULL) {
     p = (int *) malloc( SIZE * sizeof(int)); 
  }
  //do something here
} 

void foo() {
  static int * p = NULL;
  if (p != NULL) {
    //do something here 
  } else {
    p = (int *) malloc( SIZE * sizeof(int));  
    //do something
  }
}
Run Code Online (Sandbox Code Playgroud)

c compiler-construction performance

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

为什么 gcc 给出警告:函数 qsort_r 的隐式声明?

include<stdlib.h>在给出 qsort_r 的地方做。我gcc -std=c99 -O3 myfun.c -o myfun用来编译。

它编译、链接和运行良好。我不知道为什么会收到此警告以及此警告的潜在风险是什么?

顺便说一句,我的编译器是 gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)

c gcc

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

如何在C中的两个函数之间共享变量?

在C中,假设var1是foo1()中的变量,foo2()想要访问var1,但是foo1()并没有调用foo2(),所以我们不能通过参数传递它。同时,只有 foo1() 和 foo2() 会访问它,所以我不想将其声明为全局变量。这与c++中的“友元语义”类似,有没有办法在C中实现这一点?

void foo1() {
  ... 
  var1;
  ....
}


void foo2() {
 ...
 how to access var1?
 ...
}
Run Code Online (Sandbox Code Playgroud)

c function

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

在将int64_t转换为int时,如何让g ++发出警告?

我用这个命令编译下面的代码:

g++  -ansi -pedantic -Wall -Wextra myfile.cpp
Run Code Online (Sandbox Code Playgroud)

我想得到一个警告int64_t转换为int.但是根本没有任何警告.我怎样才能做到这一点?

我的g ++版本是4.6.1.

//file:myfile.cpp
#include <iostream>
using namespace std;
int main()
{
    int64_t yy = 10;
    int size = yy;
    cout << size << endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ linux x86 g++

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

我们可以使用"#elif!" 在c?

我对sprng2.0中的代码感到困惑,它在我制作之后给了我机器上的编译错误.看来我的编译器(gcc 4.7.3)不支持#elif !,是什么#elif !意思?或者我可以用它替换它#ifndef

#ifdef SYNC
if(expJ[dE]>sprng(genptr[k]))
#elif !SYNC
if(dE<=0 || expJ[dE]>sprng(genptr[k]))
#endif
Run Code Online (Sandbox Code Playgroud)

错误消息是error: operator '!' has no right operand 我测试过的,

#ifdef SYNC
if(expJ[dE]>sprng(genptr[k]))
#elif !(SYNC)
if(dE<=0 || expJ[dE]>sprng(genptr[k]))
#endif
Run Code Online (Sandbox Code Playgroud)

它给了我错误: missing expression between '(' and ')'

c gcc

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

给定堆栈和寄存器的状态,我们可以预测printf的未定义行为的结果

以下是类测验的一些简单C代码:

#include <stdio.h>

int main() {
  float a = 2.3;
  printf("%d\n", a);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译并运行:

Apple LLVM版本6.1.0(clang-602.0.53)(基于LLVM 3.6.0svn)
目标: x86_64-apple-darwin14.5.0

这段代码的输出是undefined.我试图通过检查a调试器附近的内存(Xgdb中的命令)来预测输出.例如,当地址为ais时0x7fff5fbffb98,则附近的上下文&a如下:

0x7fff5fbffb98: 1075000115
0x7fff5fbffb9c: 0
0x7fff5fbffba0: 1606417336
0x7fff5fbffba4: 32767
0x7fff5fbffba8: -1754266167
0x7fff5fbffbac: 32767
0x7fff5fbffbb0: -1754266167
0x7fff5fbffbb4: 32767
Run Code Online (Sandbox Code Playgroud)

然后的输出printf1606417352.我知道使用不正确的说明符时的输出是未定义的.出于好奇,我预计这个未定义行为的输出与正在运行的堆栈或寄存器的某些内存有关,但我还没想出如何关联它.

那么哪个地址或寄存器用于设置此输出printf?换句话说,给定运行堆栈的状态以及来自所有寄存器的所有值,我们是否可以预测(如果是这样)这种未定义行为的输出?

c gcc compilation undefined-behavior

-7
推荐指数
2
解决办法
384
查看次数