我正在努力实现这个目标:
strcat('red ', 'yellow ', 'white ')
Run Code Online (Sandbox Code Playgroud)
我希望看到"红黄白",但是,我在命令输出上看到"redyellowwhite".需要做些什么来确保空间连接正确?提前致谢.
我是C的初学者,我正在自学.我正在创建以下功能:
char *foo(int x){
if(x < 0){
char a[1000];
char b = "blah";
x = x - 1;
char *c = foo(x);
strcpy(a, b);
strcat(a, c);
return a;
}
blah ...
}
Run Code Online (Sandbox Code Playgroud)
我基本上试图返回一个附加的字符串,但我收到以下错误:
"错误:函数返回局部变量的地址",任何建议,如何解决这个问题?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
int fir; //badly named loop variable
char *input[] = calloc( strlen(argv), sizeof(char)); //initializing an array
for( fir = 1; fir< strlen(argv); fir++){ //removing the first element of argv
strcat(input, argv[fir]); // appending to input
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是第7行.它说"从不兼容的指针类型传递'strlen'的参数1".我得到了相同的错误strcat功能.对于这两种功能,它也说"给出了一个char **但是预期的const char *".
我正在尝试使用argv除第一个之外的所有元素填充新数组.我试过了argv = &argv[1],但没用.
这些strlen()和strcat()函数不采用char数组吗?
我在以下代码中收到无效的内存错误:
printf(" %s\n","FINE 5");
printf("%s LENGTH IS: %d\n","FINE 6",strlen(": "));
buffer = (char *)realloc(buffer, strlen(buffer)* sizeof(char) + (strlen(": ")+1)* sizeof(char));
printf(" %s\n","FINE 7");
strcat(buffer, ": \0");
Run Code Online (Sandbox Code Playgroud)
输出:
FINE 5
FINE 6 LENGTH IS:
检测到 2 *glibc* ./auto:realloc():下一个大小无效:0x08cd72e0***======= Backtrace:=========/lib/tls /i686/cmov/libc.so.6(+0x6b591)[0x6dd591]
这里需要注意的Fine 7是从未打印过.每次运行时无效的下一个大小错误位于同一位置.
发现这种相关性
说我有
constexpr const std::uint8_t major = 1;
constexpr const std::uint8_t minor = 10;
constexpr const std::uint8_t bugfix = 0;
Run Code Online (Sandbox Code Playgroud)
而且我要
constexpr const char* version_string(){ ... }
Run Code Online (Sandbox Code Playgroud)
要返回"1.10.0"本例中的等价物,我该怎么做?
我假设我需要这两个,在constexpr:
这个问题纯粹是学术性的,constexpr除了"有可能"之外,我认为实际上没有任何用处.我只是看不出这会如何发展.我愿意接受适用于GCC 4.9和Clang 3.4/3.5的C++ 1y解决方案.
我相信我在日本的一些博客上发现了几乎所有的东西:
我会看到我能用这些做些什么,也许当我对结果感到满意时,我自己回答这个自称有趣的问题.
使用GDB,我发现在尝试此操作时出现了分段错误:
strcat(string,¤tChar);
Run Code Online (Sandbox Code Playgroud)
鉴于该字符串被初始化为
char * string = "";
Run Code Online (Sandbox Code Playgroud)
和currentChar是
char currentChar = 'B';
Run Code Online (Sandbox Code Playgroud)
为什么会导致分段错误?
如果strcat不能用于此,我怎么能将char连接到一个字符串?
我试图自己实现strcat,我发现了像这样的Wiki的strcat实现......但是当我使用它时,存在分段错误.
下面的代码有什么问题?
char *
strcat(char *dest, const char *src)
{
size_t i,j;
for (i = 0; dest[i] != '\0'; i++)
;
for (j = 0; src[j] != '\0'; j++)
dest[i+j] = src[j];
dest[i+j] = '\0';
return dest;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试strcat用 C++ 编写自己的函数,但它有一些问题。
\n我的输入是两个字符c和,我的函数将返回一个指向与 相连的a字符的字符指针。ca
例如,
\n输入:\'abc\' \'xyz\'
\n预期输出:\'xyzabc\'
\n我的函数的输出:\'xyza@\xe2\x96\xb2\xe2\x88\xa9\'
我的函数返回一些与我的输入不同的特殊字符。
\n我调试了我的函数并发现:
\ni=0,destination[3]= source[0]=\'a\'i=1, destination[8]= source[1]=\'b\'i=2, destination[9]= source[2]=\'c\'destination[10]=\'\\0\'#include<iostream>\n#include<string.h>\nusing namespace std;\n\nchar* mystrcat ( char * destination, const char *source){\n for (int i=0; i<strlen(source); i++) {\n destination[strlen(destination)+i] …Run Code Online (Sandbox Code Playgroud) 当我尝试做这样的事情时:
char* prefix = "Sector_Data\\sector";
char* s_num = "0";
std::strcat(prefix, s_num);
std::strcat(prefix, "\\");
Run Code Online (Sandbox Code Playgroud)
等等,我收到警告
warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead.
Run Code Online (Sandbox Code Playgroud)
为什么strcat被认为是不安全的,有没有办法在不使用strcat_s的情况下摆脱这个警告?
另外,如果摆脱警告的唯一方法是使用strcat_s,它是如何工作的(语法方面:显然它不需要两个参数).
参加以下计划:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[8] = "Hello, ";
char b[7] = "world!";
strcat(a, b);
cout << a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,a并且b其大小与指定的字符串相同.
该文件规定,对于strcat(a, b)工作,a需要足够大,以包含串联的结果字符串.
不过,cout << a显示"Hello, world!".我进入未定义的行为吗?