gpt4 book ai didi

c - 被标记化的 fgets() 字符串是否能够被索引到字符中? :line[0], 错误:段

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:28 25 4
gpt4 key购买 nike

在我调用fgets() 之后,我想要的字符串将只是行的第一个字符:line[0]。当我尝试调用 %s->line[0] 时出现段错误。我最初的假设是它在缓冲区或字节中。我也认为它可能是指针指向错误的地址。 strtok() 的确切输入调用将是“!11”,比较应该读取感叹号部分,然后是使用 isdigit() 后的数字。代码:

static const char N[] = "!";
...
int main( int argc, char* argv[]) {
...

while ( ( result = fgets( line, MAX_LEN, stdin ) ) ) {
if ( line[ 0 ] == '#' ) {
printf( "%s", line );
}
//save line to the history list;
else {
cmd = strtok( line, " \n" );
printf("[0] %s\n",cmd);
char *newString;
strcpy(newString,cmd);
// printf("[0][0] %s \n", newString[0]);

} else if (strcmp(cmd[0], N) == 0 ) { //should I use a for loop for history?
if ( isdigit(cmd[1])) {
printf("Found a digit\n");
printf("Executing history command, %i : %s\n", cmd[1], histL[2]);
}
}

最佳答案

char *newString;
strcpy(newString,cmd);

在这里,没有为 newString 分配内存,您正试图在 strcpy() 中使用它。

在使用strcpy()之前,需要通过malloc()newString分配内存,如

char *newString = malloc(strlen(cmd));

编辑:

要处理 cmd 的第一个元素,为什么不使用与 line[0] == '#' 中相同的方法。 strncmp()n = 1 可能是这种方式,但 IMO 这对于检查单个字节来说有点矫枉过正。可以直接使用比较==

关于c - 被标记化的 fgets() 字符串是否能够被索引到字符中? :line[0], 错误:段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27295204/

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