gpt4 book ai didi

c - 添加 for 循环时出现段错误

转载 作者:行者123 更新时间:2023-11-30 15:10:43 27 4
gpt4 key购买 nike

当我添加 for 循环时,出现段错误。另外,当我在 while 循环条件中添加 buffer[i] !='\0' 时,出现段错误错误。我很难理解为什么会出现这个错误。谢谢。

 #include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char buffer[2000] = "-rw-r--r-- 1 ftp ftp 614400 Oct 18 2006\r\n"
char String[2000];
int i, j, k= 0;
int nextline= 0;

for(k = 0; k<strlen(buffer);k++)
{
while((buffer[i] != '\r' && buffer[i+1] != '\n'))
{
String[j] = buffer[i];
i++;
j++;
}

}
printf("%s", String);
}

最佳答案

for(k=0; k < strlen(buffer); k++) { ... } 形式的循环通常是非常糟糕的代码。它是 O(n²),这意味着循环时间随着 n 的增加呈二次方增加。为什么?每次通过循环,strlen调用函数来确定 buffer 中字符串的长度。如果字符串长度为 1000 个字符,则每个 strlen内部循环 1000 次,它本身被调用 1000 次,即内部循环迭代 1000000 次!相反,字符串的长度应该在循环之外计算一次。例如)

int buffer_len = strlen(buffer);
for(k=0; k<buffer_len; k++) { ... }

您还可以使用char *作为循环索引,并循环直到遇到空字符:

for(char *c_ptr = buffer; *c_ptr != '\0'; *c_ptr++) { ... }
<小时/>

无论如何,对于您的问题,您不需要双循环:

for(k = 0; k < strlen(buffer); k++)
{
// ...
while( /* incorrect condition here */ ) {
// ...
}
// ...
}

上面建议您要循环遍历字符串中的每个字符,然后从每个字符开始执行另一个内部循环。您可能想要的只是一个 if( )声明:

for(k = 0; k < strlen(buffer); k++)
{
// ...
if( buffer[k] == '\r' && buffer[k+1] == '\n' ) {
// ...
}
// ...
}

我会让你为 // ... 中的内容而苦苦挣扎。评论,如果有的话。通过实践你可以学到更多。

正如其他人所指出的,您的 i & j变量未初始化。您需要确保在使用它们之前正确初始化它们。您确实初始化了 k为零,这实际上是不必要的,因为 for(k=0; ... ; ...)循环已经初始化 k 的值.

关于c - 添加 for 循环时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36022077/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com