gpt4 book ai didi

c - 新行后出现段错误

转载 作者:行者123 更新时间:2023-11-30 17:43:00 25 4
gpt4 key购买 nike

我在 ** 括起的行上遇到了段错误。我通过管道输出:|状态:正常||版本:0.85||作者:PBrooks||项数:0|

在下面的代码中,在打印出 printf 语句中的“\n”后,它给了我一个段错误。我不知道如何调试这个。有人有线索吗?

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


char string[300];

struct NameValue {
char *name;
char *value;
};

struct NameValue *pairs;

void ReadStdin(int argc, char *argv) {
int x;

fread(string, sizeof (char), 300, stdin);
printf("%s\n", string);

}

void ParseInput() {
int x, num = 0; //figure out how many i need
for (x = 0; x < 300; x++) {
if (string[x] == '|') {
num++;
}
}
num /= 2; //num = how many i need
pairs = (malloc(num)); //allocate the array
int pipe = 0, i, j = 0, tempCounter = 0;
char tempName[50], tempValue[50];
printf("%lu \n", sizeof (string) / sizeof (string[0]));
if (pairs != 0) {
for (i = 0; i <= num; i++) { //counts pairs
printf("i = %i\n", i);
printf("j = %i, pipe: %i \n", j, pipe);
if (string[j] == '|') {
printf("there's a pipe\n");
pipe++;
j++;
}

while (string[j] != ':') {
printf("counter for main string: %i\n tempCounter: %i\n", j, tempCounter);
tempName[tempCounter] = string[j];
tempCounter++;
j++;
if (string[j] == ':') {
tempName[tempCounter] = '\0';
tempCounter = 0;
**printf("~~~~tempName\n is: %s", tempName);**
break;
}
}
while (string[j] != '|') {
j++;
tempValue[tempCounter] = string[j];
tempCounter++;
if (string[j] == '|') {
tempValue[tempCounter] = '\0';
tempCounter = 0;
strcpy(pairs[i].value, tempValue);
pipe++;
break;
}
}
}
}
}

int main(int argc, char *argv) {
ReadStdin(argc, argv);
ParseInput();

return (EXIT_SUCCESS);
}

编辑:抱歉!我不小心删除了空终止字符行。它在那里,但仍然给我错误。

编辑:更多信息:在程序吐出段错误之前,j 变量会增加到 6,并且临时计数器会增加到 5。

最佳答案

永远不要以 null 终止字符串 tempName。然后你尝试在这里打印:

if (string[j] == ':') {
tempCounter = 0;
**printf("~~~~tempName\n is: %s", tempName);**
break;
}

关于c - 新行后出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20339302/

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