我试图通过一些操作将char从一个指针逐个复制到另一个指针。我尝试使用strcat(),strncat(),strcpy(),strncpy()但不断收到错误。如何将char指针从源指针复制到目标指针?
我最初通过单引号作为strcat的arg 2并且它不起作用。当我把它改为双引号时,它起作用了。它与“字符串常量”与“字符常量”或完全不同的东西有关吗?
void korsoroi(char *dest, const char *src) {
int wcount = 0;
int i = 0;
while (src[i] != '\0') {
if (src[i] == 'k' && src[i + 1] == 's') {
strcat(dest, "x");
i++;
}
else if (src[i] == 't' && src[i + 1] == 's') {
strcat(dest, "z");
i++;
}
else if (src[i] == ' ') {
wcount++;
if (wcount % 3 == 0) {
strcat(dest, " niinku");
}
if (wcount % 4 == 0) {
strcat(dest, " totanoin");
}
}
else {
//expected 'const char *' but argument is of type 'char'
// strcat(dest, src[i]);
// strcat(dest, *(src + i);
//warning: cast to pointer from integer of different size
// strcat(dest, (char*)src[i]);
//returns strange characters but compiles
//dest[strlen(dest)] = src[i];
}
i++;
}
}
答案 0 :(得分:1)
您需要的是一个跟踪dest
结尾的指针。当您在dest
末尾添加更多内容时,会相应地增加此其他指针。例如:
void korsoroi(char *dest, const char *src)
{
char* dest_ptr = &dest[strlen(dest)]; // point at end of string
for(; *src != '\0; src++)
{
if(src[i] == whatever)
{
strcpy(dest_ptr, "something");
dest_ptr += sizeof("something");
}
else
{
*dest_ptr = *src;
dest_ptr++;
}
}
*dest_ptr = '\0';
}
此外,如果您要使用src[i+1]
,则首先需要检查src[i+1]
是否不是'\0'
。
答案 1 :(得分:0)
在strcat(dest, src[i]);
中,第二个参数是char
而不是char *
。
您需要使用src+i
代替char *
。这将复制整个剩余的字符串,不确定是否需要它,但是否则你需要创建一个只有一个字符的虚拟char *
,或者使用其他方法。
答案 2 :(得分:0)
此处最好的方法是直接从src
复制到dest
如果您要将源中的xth
字节复制到dest中的yth
位置,则可以使用。
dest[y] = src[x]
然后你可以将它包装在循环中,以复制任意数量的字节。
请勿忘记在\0
的末尾添加dest
。
答案 3 :(得分:0)
这是我的解决方案
void korsoroi(char *dest, const char *src) {
int count = 0;
while (*src) {
if (*src == 'k' && *(src + 1) == 's') {
*dest++ = 'x';
src++;
} else if (*src == 't' && *(src + 1) == 's') {
*dest++ = 'z';
src++;
} else if (*src == ' ') {
*dest++ = ' ';
count++;
if (!(count % 3)) {
strcpy(dest, "niinku");
dest += strlen("niinku");
if(*(src + 1)){
*dest++ = ' ';
}
} else if (!(count % 4)) {
strcpy(dest, "totanoin");
dest += strlen("totanoin");
if(*(src + 1)){
*dest++ = ' ';
}
}
} else {
*dest++ = *src;
}
src++;
}
*dest = '\0';
}