Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在字符指针的中间添加0_C_Pointers_Memory - Fatal编程技术网

C 在字符指针的中间添加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

我有一个较大的字符串,我想在包含特定字符串之前添加\0字符

例:

inputString=“some2.text.here”=>outputText=“some2”

我设法找到了输出文本的最后一个位置,但我不知道如何添加\0并使指针在此处结束

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]
    以确保可读性您的解决方案工作,此代码将替换扩展,这就是为什么我总是想找到结尾。我同意它可以在很多方面得到改进。