小编art*_*rtm的帖子

指向char,不同术语的指针

我曾strncat多次使用过,但现在只需检查标准中的正式定义:

#include <string.h>
char *strncat(char * restrict s1,
     const char * restrict s2,
     size_t n);
Run Code Online (Sandbox Code Playgroud)

strncat函数从s2指向的数组到s1指向的字符串的末尾附加不超过n个字符(空字符及其后面的字符未附加).s2的初始字符将覆盖s1末尾的空字符.终止空字符始终附加到结果.

通常我会想到s1s2简单地指向char.但正如所看到的,该标准对它们的要求不同:

  • 指向的字符串 s1
  • 指向的数组 s2

s1和之间的唯一区别s2是const限定符 - 这就是为什么一个被称为数组而另一个被称为字符串

而且,在脚注中:

因此,可以在s1指向的数组中结束的最大字符数是strlen(s1)+ n + 1.

所以这里他们的引用方式s1不同:指向的数组(不是字符串)s1

有没有的调用这些不同方式的任何含义s1s2

c arrays string language-lawyer

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

在源代码中留下调试部分是一个好习惯吗?

我正在与一位高级 C++ 开发人员一起工作。在他的大部分代码中,他都包含调试部分。它看起来像这样:

void do_something() {
    int var = 10

#ifndef NODEBUG
    trace("Function Start %s", __FUNCTION__);
#endif
    while (someCondition) {
        var += 1 
#ifndef NODEBUG 
    trace ("Var = %d \n", var)
#endif
    }
    ... (Do some other stuff)
    ... (Do some more stuff)

#ifndef NODEBUG
    trace("Function End %s", __FUNCTION__);
#endif 
}
Run Code Online (Sandbox Code Playgroud)

我不像他那样有经验,但这些代码片段遍布代码,这确实阻碍了可读性和可理解性。在我看来,预处理器条件至少应该与其余代码适当地结合使用。

这种练习是我应该养成的习惯吗?我不确定这是否是一个好方法,但在我看来,这极大地膨胀了代码,应该被排除在外。

c c++ debugging

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

用于迁移几个提交的git rebase?

我想了解更多git rebase.

假设我有这个工作流程,git rebase在这里会有用吗?如果是这样,这将是对提交X迁移到Z的命令(假设不使用摘樱桃)从MASTERBRANCH.

在此输入图像描述

git

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

Putchar和Getchar在C中

我正在阅读K&R的The C Programming Language,并对putchar和getchar感到困惑.我制作了一个程序,你输入10个字符,程序将它们打印回屏幕.

#include <stdio.h>

int main() 
{
    int i;
    int ch;
    for(i = 0; i < 10; i++)
    {
        printf("Enter a single character >> ");
        ch = getchar();
        putchar(ch);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望得到这样的输出:

Enter a single character >> a
a
Enter a single character >> b
b
Run Code Online (Sandbox Code Playgroud)

...等等10次,但这是我得到的输出:(进入2个字符后我停止了)

Enter a single character >> a
aEnter a single character >>
Enter a single character >> b
bEnter a single character >>
Enter a single character >>
Run Code Online (Sandbox Code Playgroud)

不确定为什么我的输入字符与固定字符串组合并被输出.

另外,我不太清楚为什么使用int来存储字符.

c kernighan-and-ritchie putchar getchar

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

避免非常量引用参数

我遇到了这个输出参数约定,它更喜欢指针而不是引用。

“在函数参数列表中,所有引用都必须是常量:

void Foo(const string &in, string *out);

事实上,在 Google 代码中,输入参数是值或常量引用,而输出参数是指针,这是一个非常强大的约定。输入参数可以是const 指针,但我们绝不允许非常量引用参数,除非约定需要,例如swap()。

这似乎与这个问题的公认答案有些不同,后者说应该使用引用来代替,除非该函数涉及一些指针算术。

所以我想知道这input param is const reference, output param is pointer是否只是谷歌风格的问题,还是一种更普遍接受的做法(以避免非常量引用参数)。

c++

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

在单个函数中调用时,rand()返回相同的值

我是一个C++新手,我很难过.我需要在我的main函数中调用这个函数三次,但每次它给我相同的结果,即pull_1,pull_2,pull_3是相同的.我需要做些什么来使它们实际上是随机的?

string PullOne()
{
    string pick;
    string choices[3] = {"BAR", "7", "cherries"};

    std::srand(time(0));
    pick = choices[(std::rand() % 3)];
    return pick;
}
Run Code Online (Sandbox Code Playgroud)

从我的主要功能:

string pull_1, pull_2, pull_3;
pull_1 = PullOne();
pull_2 = PullOne();
pull_3 = PullOne();
Run Code Online (Sandbox Code Playgroud)

c++ random

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

理解逗号运算符

int main()
{
    int a = (1,2,3);
    int b = (++a, ++a, ++a);
    int c= (b++, b++, b++);
    printf("%d %d %d", a,b,c);
}
Run Code Online (Sandbox Code Playgroud)

我是编程初学者.我没有得到这个程序如何显示我的输出6 9 8.

c comma-operator

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

为指针分配地址

我想知道是否有其他方法可以为指针分配指向其值的地址.例如,通常的方法是:

int a = 10;
int *ptr;
ptr = &a;
Run Code Online (Sandbox Code Playgroud)

但在某些地方,我看到它宣称:

int *ptr = &a;
Run Code Online (Sandbox Code Playgroud)

这两种方式都是等价的吗?我有点困惑,因为我一直认为*ptr给出a的,而不是地址.有人可以解释一下吗?谢谢.

c c++ pointers

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

基类构造函数的使用声明

乍一看,using它用于导入特定的函数(例如using std::cout范围)。但这using实际上将基类的所有构造函数导入到派生类中。这份声明的背后究竟隐藏着什么using

template< typename T >
class Vec : public std::vector< T >
{
public:
    using std::vector<T>::vector;  // ?

    //...
};

Run Code Online (Sandbox Code Playgroud)

c++ oop inheritance class c++11

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

Bash - 查找 exec 返回值

我需要一种方法来判断 grep 是否找到了某些内容,并且最好将该返回值传递给 if 语句。

假设我有一个tmp文件夹(当前文件夹),其中有多个文件和子文件夹。我想搜索abc以模式命名的所有文件xyz。如果找到任何出现的情况,则认为搜索成功xyz(无论xyz找到多少次)。如果未找到 ,则搜索失败xyz

在 bash 中,可以这样完成:

find . -name "abc" -exec grep "xyz" {} \;
Run Code Online (Sandbox Code Playgroud)

这将表明是否xyz找到了。但我不确定如何将结果(成功与否)传递回语句if

任何帮助,将不胜感激。

linux bash

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