簡體   English   中英

C字符串操作(剪切一些特殊的char *尾部)

[英]C string manipulating (cutting some special char* tail)

為什么在這里我無法獲得“ cd fjadf”?
程序總是向我顯示一個Bus error: 10...

我想使用這個super_cut_tail()函數來切斷///fjdakf ,它是由用戶分配的。 但是為什么這個功能不能實現呢?

char* super_cut_tail(char *char_arg, char *special) {
    char *special_ptr;
    special_ptr = strstr(char_arg, special);
    int len = (int)strlen(char_arg) - (int)strlen(special_ptr);
    char_arg[len] = '\0';
    char_arg = strdup(char_arg);
    return char_arg;
}

int main(int argc, char * argv[])
{
    char *test = "cd fjadf///fjdakf";
    char *outcome;
    outcome = super_cut_tail(test, "///");
    printf("test: %s\n", test);

    return 0;
}

由於您正在修改用於初始化test的字符串,因此程序表現出未定義的行為。 使用時:

char *test = "cd fjadf///fjdakf";

"cd fjadf///fjdakf"保存在程序的只讀存儲器中。 修改該字符串,您正在執行此行

char_arg[len] = '\0';

是導致未定義行為的原因。

采用:

char test[] = "cd fjadf///fjdakf";

您可以做的另一件事是使用:

char const* test = "cd fjadf///fjdakf";

並先嘗試在super_cut_tailsuper_cut_tail字符串的副本,然后再嘗試對其進行修改。

char* super_cut_tail(char const* char_arg, char *special) {
    char* ret_string = strdup(char_arg);
    char *special_ptr;
    special_ptr = strstr(ret_string, special);
    int len = (int)strlen(ret_string) - (int)strlen(special_ptr);
    ret_string[len] = '\0';
    return ret_string;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM