C - 使用strlen时的分段错误?

时间:2017-12-05 22:36:21

标签: c strlen

  

使用strlen我遇到了分段错误。

我的功能:

void myFunction() 
{
    int counter = 0;
    char * userInput;
    bool validInput = true;

    while (1) 
    {
        validInput = true;
        printf("\nEnter a word: ");
        scanf("%s", userInput);

        for(counter = 0; counter < strlen(userInput); counter++)
        {
            if (islower(userInput[counter]) == 0)
            {
                validInput = false;
                break;
            }
            if (isalpha(userInput[counter]) == 0)
            {
                validInput = false;
                break;
            }
        }

        if (!validInput)
        {
            printf("Please enter a wordcontaining only lower-case letters.\n");
            continue;
        }

        // Do something
        break;
    }
}

我的scanf线有问题吗?在使用strlen之前我从未遇到过这类问题......所以我想我可能没有正确地将用户的输入读入用户输入&#39;。

2 个答案:

答案 0 :(得分:1)

 char * userInput;

上面的变量是一个指针,它指向无处(平均没有内存位置)。

它应包含存储/检索数据的地址。

因此,您必须为此变量分配内存或使用strdup

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
    char *inputStr; //wrong.
    char inputStrArray[100]; //correct
    char *inputStrPtr = malloc(sizeof(char)*100) ;//OK but dont forget to free the memory after use
    int condition = 1;

    while(condition )
    {
        printf("Please enter a string :");
        //scanf("%s",&inputStr); //wrong
        //printf(inputStr);
        scanf("%s",inputStrArray);
        printf("Ok I got it %s \n",inputStrArray);
        printf("Please enter one more time a string: ");
        scanf("%s",inputStrPtr);
        printf("Now I got it %s \n",inputStrPtr);
        condition = 0;

    }
    free(inputStrPtr);
    inputStrPtr = NULL; //try not to use it anywhere else
    return 0;
}

答案 1 :(得分:0)

改为使用char userInput[128];

scanf期望指向有效内存的指针将用户输入的内容放入。