您好strchr()有问题,因为它会返回指向该字符首次出现的指针,但是如何从中获取索引以便能够更改它?如何将一个字符更改为两个字符? 所以我需要将src中的每个'x'更改为dest中的'ks'。
我的代码:
#include <stdio.h>
#include <string.h>
void antikorso(char *dest, const char *src) {
strcpy(dest, src);
if (strchr(dest, 'x')) {
}
printf("\n%s", dest);
}
int main(void) {
const char *lol = "yxi yxi";
char asd[1000];
antikorso(asd, lol);
}
答案 0 :(得分:1)
以下代码行可能会有所帮助:
#include <stdio.h>
#include <string.h>
void antikorso(char *dest, const char *src) {
int j=0;
for(int i=0;i<strlen(src);i++)
{
if (src[i] == 'x')) {
dst[j]='k';
j++;
dst[j] = 's';
j++;
}
else
{
dst[j] = stc[i];
j++;
}
i++;
}
dst[j] = '\0';
printf("\n%s", dest);
return dest;
}
int main(void) {
const char *lol = "yxi yxi";
char asd[1000];
antikorso(asd, lol);
}
答案 1 :(得分:1)
您可能不需要索引,只需一个指针。 “索引”将是从开头的偏移量,因此dest[i]
与dest + i
相同,后者是dest
的地址,加上i
个字符。所以你可以使用:
char *cp;
if (cp=strchr(dest, 'x')) {
*cp= 'y';
但如果你想要索引,那就是
if (cp=strchr(dest, 'x')) {
int i = cp - dest;
答案 2 :(得分:1)
你可以这样做:
void antikorso(char *dest, const char *src) {
const char *p = src;
int i;
for (i = 0; *p != '\0'; i++, p++) {
if (*p != 'x') {
dest[i] = *p;
} else {
dest[i++] = 'k';
dest[i] = 's';
}
}
dest[i] = '\0';
printf("\n%s", dest);
}
答案 3 :(得分:1)
其他答案并非不正确,只是想解决一个重要问题:通过写入目标缓冲区的末尾来解决未定义的行为是不安全的(与strcpy
或{{} {}}等许多stdlib函数相同的问题{1}}如今被认为是不安全的)!所以我强烈建议你修改你的功能签名(如果你有自由的话):
strcat
返回值不会向安全性添加任何内容,但会阻止您在输出后调用size_t antikorso(char* dest, size_t length, const char* src)
// ^^ ^^
{
char* d = dest;
char* end = d + length;
for(; *src; ++src, ++d)
{
// not much different than the other answers, just the range checks...
if(d == end)
break;
*d = *src;
if(*d == 'x')
{
*d = 'k'
if(++d == end)
break;
*d = 's';
}
}
// now null-terminate your string;
// first need to get correct position, though,
// in case the end of buffer has been reached:
d -= d == end;
// this might possibly truncate a trailing "ks";
// if not desired, you need extra checks...
*d = 0;
return d - dest;
}
一次...
答案 4 :(得分:1)
如果strchr
返回有效地址,则可以使用指针算法来获取索引,方法是减去&#34;基地址&#34; - 即指向数组第一个元素的指针。
#include <string.h>
#include <stddef.h> // NULL, ptrdiff_t
const char* result = strchr(dest, 'x');
if ( result != NULL)
{
ptrdiff_t index = result - dest;
... // do stuff with index
}
ptrdiff_t
是一个标准的C整数类型,适合表示指针运算的结果。