我曾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末尾的空字符.终止空字符始终附加到结果.
通常我会想到s1并s2简单地指向char.但正如所看到的,该标准对它们的要求不同:
s1s2s1和之间的唯一区别s2是const限定符 - 这就是为什么一个被称为数组而另一个被称为字符串?
而且,在脚注中:
因此,可以在s1指向的数组中结束的最大字符数是strlen(s1)+ n + 1.
所以这里他们的引用方式s1不同:指向的数组(不是字符串)s1
有没有的调用这些不同方式的任何含义s1和s2?
我正在与一位高级 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)
我不像他那样有经验,但这些代码片段遍布代码,这确实阻碍了可读性和可理解性。在我看来,预处理器条件至少应该与其余代码适当地结合使用。
这种练习是我应该养成的习惯吗?我不确定这是否是一个好方法,但在我看来,这极大地膨胀了代码,应该被排除在外。
我想了解更多git rebase.
假设我有这个工作流程,git rebase在这里会有用吗?如果是这样,这将是对提交X迁移到Z的命令(假设不使用摘樱桃)从MASTER到BRANCH.

我正在阅读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来存储字符.
我遇到了这个输出参数约定,它更喜欢指针而不是引用。
“在函数参数列表中,所有引用都必须是常量:
void Foo(const string &in, string *out);
事实上,在 Google 代码中,输入参数是值或常量引用,而输出参数是指针,这是一个非常强大的约定。输入参数可以是const 指针,但我们绝不允许非常量引用参数,除非约定需要,例如swap()。”
这似乎与这个问题的公认答案有些不同,后者说应该使用引用来代替,除非该函数涉及一些指针算术。
所以我想知道这input param is const reference, output param is pointer是否只是谷歌风格的问题,还是一种更普遍接受的做法(以避免非常量引用参数)。
我是一个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) 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.
我想知道是否有其他方法可以为指针分配指向其值的地址.例如,通常的方法是:
int a = 10;
int *ptr;
ptr = &a;
Run Code Online (Sandbox Code Playgroud)
但在某些地方,我看到它宣称:
int *ptr = &a;
Run Code Online (Sandbox Code Playgroud)
这两种方式都是等价的吗?我有点困惑,因为我一直认为*ptr给出a的值,而不是地址.有人可以解释一下吗?谢谢.
乍一看,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) 我需要一种方法来判断 grep 是否找到了某些内容,并且最好将该返回值传递给 if 语句。
假设我有一个tmp文件夹(当前文件夹),其中有多个文件和子文件夹。我想搜索abc以模式命名的所有文件xyz。如果找到任何出现的情况,则认为搜索成功xyz(无论xyz找到多少次)。如果未找到 ,则搜索失败xyz。
在 bash 中,可以这样完成:
find . -name "abc" -exec grep "xyz" {} \;
Run Code Online (Sandbox Code Playgroud)
这将表明是否xyz找到了。但我不确定如何将结果(成功与否)传递回语句if。
任何帮助,将不胜感激。