我想做一些簡單的事情,但我一直對此持嘲弄太久。我有一個字符串,總是以特定的「標記」結尾。在「++」下方的情況下。我想用一個較短的標記替換結尾標記,讓我們說「#」。用另一個字符串替換字符串的一部分會導致段錯誤
strstr
返回NULL或指向初始結束標記的指針。 strcpy
應該從strstr
返回指針並用「#\ 0」覆蓋「++」。
至少這是我認爲應該做的。相反,我得到了一個「賦值使指針沒有轉換的整數」警告。我已嘗試strcpy(*newThing, "#");
和其他一些事情在這一點上。不會導致錯誤的事情會導致段錯誤。
在這種情況下,C是從堆棧上的一些不可變空間獲取原始字符串的存儲空間嗎?我需要使用其中一個「alloc」嗎?我也嘗試過,但可能錯過了一些東西。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char *thing="ssssssssssssssss++";
char *newThing;
newThing = strstr(thing, "++");
strcpy(newThing, "#");
printf("%s\n", thing);
exit(0);
}
您不能修改C中的字符串字面值(即使您嘗試修改以「替換」它的某些部分的方式,也不會修改數組)。 – 2014-10-31 22:21:34
使用'strdup'用堆分配副本替換字符串字面值,或將'thing'定義爲'char thing []'將其分配到堆棧上。此外,你應該檢查'newThing'是否爲NULL,而不是將它傳遞給'strcpy'。 – Phillip 2014-10-31 22:25:26
如果我用'char thing [] =「ssssssssssssssss ++」;'替換'char * thing =「ssssssssssssssss ++」;',一切正常。 http://ideone.com/IOPCAI – 2014-10-31 22:25:28