我正在尝试通过一些操作将 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++;
}
}
最佳答案
您需要的是一个跟踪dest
结尾的指针。当您在 dest
的末尾添加更多内容时,您会相应地增加这个 other 指针。示例:
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'
.
关于从 const char *src 到 char *dest 的 C 逐字符字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41096192/