2015-02-10 110 views
-1

我目前有一个函数,它以char数组的形式接受用户输入。我试图通过下面使用的函数解析输入,以及为所使用的指针分配内存。然而,我期望从用户那里得到的输入是两个字符“ab”,后面跟着一个整数。当我尝试将其转换为整数时,程序继续执行seg故障。我试着分配更多的内存,改变数组的大小,任何帮助将不胜感激!字符串函数返回seg错误

int input(char input[10]) 
    { 
     int val; 
     char *firstW,*secondW; 

     firstW = malloc(sizeof(10)); 
     secondW = malloc(sizeof(10)); 

     firstW = strtok(input," "); 
     firstW = strstr(input,"ab"); 
     secondW = strtok(NULL, " "); 

     val = atoi(secondW); 

//When atoi is called, secondW contains any integer for instace "10", but of course as a string type 
//trying to convert string to integer, but returns seg fault 
+0

secondW声明在哪里?你打电话给atoi时有什么? – 2015-02-10 01:08:23

+0

你从不检查'secondW!= NULL'。 – 2015-02-10 01:13:50

+0

如果'input'源自字符串文字,那可能是问题---'strtok'修改'input'(并且修改字符串文字是未定义的行为)。在附注中,'firstW'和'secondW'的'malloc'是多余的---'strtok'返回一个指向(修改)'input'的指针。 – 2015-02-10 01:15:25

回答

0

malloc(sizeof(10))可能是一个错误。它不分配10个字节,但它分配足够的字节来保存int。根据您的计算机的体系结构,这可能是4或8个字节。而当您初始化firstWsecondW时,您需要malloc(10)

+4

当然是一个错误。但是代码实际上从来没有使用过这个值。指针立即被'strtok' /'strstr'的​​返回值覆盖 – rici 2015-02-10 01:17:48