在我调用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/