【发布时间】:2015-06-02 23:48:54
【问题描述】:
我正在制作一个程序,它将在字符串数组中搜索,并且对于每个字符串,它将搜索指定的字符。如果找到该字符,请将其删除。在本例中,我想删除字符 'r'。
代码如下:
void convertStrings(char **line) {
for (int str = 0; str < MAX_LINE_LENGTH; ++str) {
for (int ch = 0; ch < MAX_STR_LENGTH; ++ch) {
if (line[str][ch] == 'r') {
removeChar(line[str], 'r');
}
}
}
}
void removeChar(char *str, char c) {
int i = 0;
int j = 0;
while (str[i]) {
if (str[i] != c) {
str[j++] = str[i];
}
i++;
}
str[j]=0;
}
我不确定删除字符的算法是否正确,但主要错误在其他地方。更具体地说,我在该行中遇到了分段错误:
if (line[str][ch] == 'r') {
为什么会出现段错误?另外,removeChar 的算法是否正确?
这是我的主要功能:
int main() {
char line[3][10] = {"pep", "rol", "rak"};
printf("%s\n", line[1]);
convertStrings(line);
printf("%s\n", line[1]);
return 0;
}
提前致谢。
【问题讨论】:
-
"为什么会出现段错误?" -- 不知道。我们将不得不查看更多代码(具体来说,您如何调用
convertStrings以及MAX_LINE_LENGTH和MAX_STR_LENGTH的值是什么)。 "另外,removeChar 的算法是否正确?" -- 是的。好像是这样。 -
您确定
line包含准确的MAX_LINE_LENGTH行,并且每个字符串准确包含MAX_STR_LENGTH字符吗? -
你是否为双指针
line指向的对象分配了足够的内存? -
我在问题中添加了我的主要功能。
-
@pk163 ,
MAX_LINE_LENGTH和MAX_STR_LENGTH的值是多少?