我試圖通過定界符與此代碼字符串分割到兩個字符串由分隔符
int indexOf(char *msg, char c) {
int i;
for (i = 0; msg[i] != '\0'; i++) {
if (msg[i] == c)
return i;
}
return -1;
}
char *substring(char *msg, int startIndex, int endIndex) {
int length = endIndex - startIndex;
char *input = (char *)malloc(length * sizeof(char) + 1);
int i;
for (i = startIndex; i != endIndex; i++) {
input[i - startIndex] = msg[i];
}
input[endIndex] = '\0';
return input;
}
一個字符串分割成兩個串在main
我:
index = indexOf(msg, ':');
first = substring(line, 0, index - 1);
second = substring(line, index + 2, strlen(line));
這段代碼產生正確的輸出,當我測試它與valgrind。在第二個變量中分配的子字符串會產生一個錯誤。
這個函數的問題在哪裏?有另一種方法將字符串拆分爲兩個字符串嗎?
char *msg = readMessage(stdin);
index = indexOf(msg, '\n');
char *line, *first, *second;
line = substring(msg, 0, index);
末的valgrind Address 0x5203a52 is 5 bytes after a block of size 13 alloc'd
編輯:對於
index = indexOf(line, ':');
另一個bug現在Valgrind的錯誤是在子線input[endIndex] = '\0';
:
Invalid write of size 1
編輯:我的代碼解決方案有兩個錯誤
在主
index = indexOf(msg, ':');
應該
index = indexOf(line, ':');
,並在子
input[endIndex] = '\0';
應該
input[length] = '\0';
感謝所有
什麼錯誤?順便說一句,不要施加'malloc'返回。 – coredump
您正在施放'malloc',如果不是'strlen(msg)'? '線路'在哪裏進來? – t0mm13b
可能會查看'strtok'?始終將指針變量初始化爲NULL,以保持完整性。你有調試過嗎? readMessage的代碼是什麼?我認爲從函數返回的指針變量會因爲在函數的堆棧中分配而被破壞。 – t0mm13b