C中strcat和strncat函数的另一种替代方法是什么?
这是代码的特定部分,我在使用C中strcat和strncat函数的另一种替代方法是什么?,c,string,character,strcat,C,String,Character,Strcat,这是代码的特定部分,我在使用strcat()和strncat()函数连接两个字符串时遇到了问题 strcat()函数声明为char*strcat(char*dest,const char*src)和strncat()为char*strncat(char*dest,const char*src,size\t n),但是当第二个参数是字符串中的单个字符时,这两个函数都会出现问题,即,它不会以'\0'结尾。我需要将a字符连接到字符串 那么,除了这两个功能之外,还有其他的选择吗?或者,有没有办法让这两个
strcat()
和strncat()
函数连接两个字符串时遇到了问题
strcat()
函数声明为char*strcat(char*dest,const char*src)
和strncat()
为char*strncat(char*dest,const char*src,size\t n)
,但是当第二个参数是字符串中的单个字符时,这两个函数都会出现问题,即,它不会以'\0'
结尾。我需要将a字符连接到字符串
那么,除了这两个功能之外,还有其他的选择吗?或者,有没有办法让这两个功能为我工作
char *cipher_str = (char *)malloc(sizeof(char) * 26);
for (int j = 0; j < col; j++) {
for (int i = 0; i < col; i++) {
if (min == cipher[0][i] && (done[i] != 1)) {
done[i] = 1;
for (int k = 0; k < rows; k++)
strcat(cipher_str, cipher[i][k]);
}
}
...
char*cipher\u str=(char*)malloc(sizeof(char)*26);
对于(int j=0;j
这里最简单的方法就是将字符“手动”附加到字符串中,例如:
int m=0;
....
cipher_str[m++]=cipher[i][k];
....
cipher_str[m]='\0';
由于您使用strcat附加1个字符,因此可以使用此函数
void strcat(char* dest, char src)
{
int size;
for(size=0;dest[size]!='\0';++size);
dest[size]=src;
dest[size+1]='\0';
}
您提到在“cipher_str”的末尾有“\0”,我用它来确定长度
C中strcat和strncat函数的另一种替代方法是什么
内联代码可以很好地与size\t m
配合使用,就像与answer配合使用一样
作为独立功能:
char *strcat_c(char *s, char c) {
size_t len = strlen(s);
s[len++] = c;
s[len] = '\0';
return s;
}
char *strncat_c(char *s, char c, size_t n) {
char sc[2] = { c, '\0' };
return strncat(s, sc, n);
}
// or with C11 compound literals
char *strncat_c(char *s, char c, size_t n) {
return strncat(s, (char [2]) { c, '\0' }, n);
}
将单个字符转换为长度为1的字符串,然后使用
strcat()
小心缓冲区溢出您的代码存在多个问题:
与cipher\u str
一起分配,因此未初始化。将其作为malloc()
的目标字符串传递具有未定义的行为,因为它不包含正确的字符串strcat()
- 将
作为第二个参数传递给char
是不正确的。如果坚持使用函数附加单个strcat
,可以编写:char
char *cipher_str = calloc(26); for (int j = 0; j < col; j++) { for (int i = 0; i < col; i++) { if (min == cipher[0][i] && done[i] != 1) { done[i] = 1; for (int k = 0; k < rows; k++) strncat(cipher_str, &cipher[i][k], 1); } } ...
请提供
。对于仅附加一个字符,您可以使用密码的定义
(前提是您有足够的空间分配给s)@PaulOgilvie char cipher[rows][col;@PaulOgilvie为丢失的数据片段感到抱歉,然后在处理之前将密码初始化为“\0”,并修改将缓冲区初始化为零(使用memset)并使用memcpy而不是strcat。通常,语法为memcpy(buf+pos,&ch,1);int l=strlen(s);s[l]=ch;s[l+1]=0;
char data[1000] = "foo"; appendchar(data, 'b'); appendchar(data, 'a'); appendchar(data, 'r'); puts(data);
char *cipher_str = calloc(26); for (int j = 0; j < col; j++) { for (int i = 0; i < col; i++) { if (min == cipher[0][i] && done[i] != 1) { done[i] = 1; for (int k = 0; k < rows; k++) strncat(cipher_str, &cipher[i][k], 1); } } ...
char *cipher_str = (char *)malloc(sizeof(char) * 26); int ii = 0; for (int j = 0; j < col; j++) { for (int i = 0; i < col; i++) { if (min == cipher[0][i] && (done[i] != 1)) { done[i] = 1; for (int k = 0; k < rows; k++) { if (ii < 25) { cipher_str[ii++] = cipher[i][k]; } else { // cipher_str is too short for the job. } } } cipher_str[ii] = '\0'; ...