在編寫一個簡單的函數(shù)以從字符串中刪除特定字符的過程中,我遇到了一個奇怪的問題:void str_remove_chars( char *str, char to_remove){ if(str && to_remove) { char *ptr = str; char *cur = str; while(*ptr != '\0') { if(*ptr != to_remove) { if(ptr != cur) { cur[0] = ptr[0]; } cur++; } ptr++; } cur[0] = '\0'; }}int main(){ setbuf(stdout, NULL); { char test[] = "string test"; // stack allocation? printf("Test: %s\n", test); str_remove_chars(test, ' '); // works printf("After: %s\n",test); } { char *test = "string test"; // non-writable? printf("Test: %s\n", test); str_remove_chars(test, ' '); // crash!! printf("After: %s\n",test); } return 0;}我不明白為什么第二項測試失敗了?對我來說,它看起來像第一表示char *ptr = "string";相當于這一個:char ptr[] = "string";。是不是這樣
char * str =“ STRING”和char str [] =“ STRING”之間的區(qū)別?
忽然笑
2019-10-11 10:56:14