我试图通过定界符与此代码字符串分割到两个字符串由分隔符
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