C 在字符指针的中间添加0
我有一个较大的字符串,我想在包含特定字符串之前添加\0字符 例: inputString=“some2.text.here”=>outputText=“some2” 我设法找到了输出文本的最后一个位置,但我不知道如何添加\0并使指针在此处结束C 在字符指针的中间添加0,c,pointers,memory,C,Pointers,Memory,我有一个较大的字符串,我想在包含特定字符串之前添加\0字符 例: inputString=“some2.text.here”=>outputText=“some2” 我设法找到了输出文本的最后一个位置,但我不知道如何添加\0并使指针在此处结束 void test() { char* str = "some2.text.here"; char* search = ".text.here"; char * new; //size
void test()
{
char* str = "some2.text.here";
char* search = ".text.here";
char * new;
//size text to be removed
int lengthOfStr = 10; //search length
int size = 0;
char stringEnding = '\0';
char * newPath;
new = '\0';
for(int i = 0; i < 200; i++){
if(*(str + i) == '\0'){
printf("found on index %d", i);
printf("\n i: %d \n lengthOfStr : %d", i, lengthOfStr);
new = (char *) malloc(i - lengthOfStr);
memcpy(new, str, sizeof(i - lengthOfStr));
break;
}
}
printf("\n string value : %s", new);
}
void测试()
{
char*str=“some2.text.here”;
char*search=“.text.here”;
字符*新;
//调整要删除的文本的大小
int lengthOfStr=10;//搜索长度
int size=0;
字符字符串结尾='\0';
char*newPath;
新='\0';
对于(int i=0;i<200;i++){
如果(*(str+i)='\0'){
printf(“在索引%d中找到”,i);
printf(“\n i:%d\n lengthOfStr:%d”,i,lengthOfStr);
新=(char*)malloc(i-lengthOfStr);
memcpy(新,str,sizeof(i-lengthOfStr));
打破
}
}
printf(“\n字符串值:%s”,新);
}
在这里,我试图复制一个特定的长度,但工作不好。。。我还尝试添加str[5]='\0',但也没有成功。。。有什么建议吗?似乎有三个问题
new = malloc(i - lengthOfStr + 1); // Allocate 1 more char
memcpy(new, str, i - lengthOfStr); // Correct number of bytes to copy
new[i - lengthOfStr] = '\0'; // Terminate the string
顺便说一句:您当前的代码总是希望“搜索”字符串位于当前字符串的末尾。也许这就是你想要的,但在我看来,你应该使用
strstr
而不是循环。而且。。。使用strlen
而不是硬编码长度。i-lengthOfStr的结果是int
,因此sizeof(i-lengthOfStr)
实际上是sizeof(int)
。您需要通过i-lengthOfStr
计算实际大小。请记住为空终止符分配一个额外的字符。new='\0'
将new
设置为空指针(character'\0'
是表示空指针的整数0)也是一种令人困惑的方式。这里没有关系,因为您从未使用过它,但是如果您希望new
指向空字符串,请使用new=“”
。OT:*(str+i)
->str[i]
以确保可读性您的解决方案工作,此代码将替换扩展,这就是为什么我总是想找到结尾。我同意它可以在很多方面得到改进。