【问题标题】:Why is this C code giving me a seg fault? [duplicate]为什么这个 C 代码给我一个段错误? [复制]
【发布时间】:2009-10-02 11:18:39
【问题描述】:

可能重复:
How to copy char *str to char c[] in C?

char *token = "some random string";
char c[80];  
strncpy(c, token, sizeof c - 1); 
c[79] = '\0';
char *broken = strtok(c, "#");

【问题讨论】:

  • 但是一个不同的问题。我要求确切的编码问题。这就是 SO 的意义所在。
  • 你想用第 3-5 行做什么,两个副本和最后一个字符的设置为 \0?如果你插入一些有用的 printfs,你知道在它死之前你能走多远吗?
  • 在这里查看答案:stackoverflow.com/questions/1508838/…
  • @Alex Xander - 这是一个不同的问题吗?代码完全一样,你的问题(为什么会出现段错误)也是一样的。

标签: c string char


【解决方案1】:

您的代码不会在以下情况下崩溃:

#include <string.h>

main()
{
char *token = "some random string";
char c[80];  
strcpy( c, token);
strncpy(c, token, sizeof c - 1); 
c[79] = '\0';
char *broken = strtok(c, "#");
}

【讨论】:

  • 他不使用:strcpy(c, token);也许您可以更清楚为什么这个额外的步骤很重要?
  • @Egwor,在早期的版本中是一样的。我想这就是在令牌指向一个太长的字符串的情况下导致问题的原因。
【解决方案2】:

此代码有效,您是否指定了正确的包含?

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

int
main() {
  /* ORIGINAL CODE */
  char *token = "some random string";
  char c[80];  
  strcpy( c, token);
  strncpy(c, token, sizeof c - 1); 
  c[79] = '\0';
  char *broken = strtok(c, "#");

  /* ADDED THE FOLLOWING LINES */
  printf("%s\n", broken);
  exit(1);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多