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

标签 c debugging indexing segmentation-fault fgets

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

相关文章:

将 8 位 sse 寄存器转换为 16 位短路

C++ 在监 window 口中查看互斥量值

database - 如何使用 desc 顺序创建索引组织表

debugging - libGDX 中的调试绘图

c# - 发布版本中 visual studio 2010 中的核心转储

r - 索引出 R 中具有相同值的后续行

MySQL 搜索策略

android - FFmpeg mux 视频使用 libavformat avcodec 但无法播放输出

C - 反向转换器过程

c - 3D 金字塔看起来散乱,两边混在一起