0

我正在创建一个 char* ,它本质上将被视为一个字符串。该字符串应该被一遍又一遍地使用。每次我试图检查while循环,看看它是否正确的“退出”......

*我不断收到分段错误...我做错了什么-非常愚蠢的错误-可能吗?

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

int main(int argc, char* argv[])
{

    char* input = (char*)malloc(sizeof(char));
    input = "CONTINUE";

    while(strcmp(input, "quit") != 0)
    {
            printf("%s", "System: ");
            scanf("%s", input);
    }
    return 0;
}
4

2 回答 2

1

我第一眼看到的两个问题:

char* input = (char*)malloc(sizeof(char)); 
  1. 您正在为指针分配一个只有一个字符的内存。它应该有足够的内存来保存你的字符串,而不仅仅是一个字符。

  2. 您应该使用 . 将字符串复制到分配的缓冲区中strcpy。不将字符串文字分配给您的指针。请注意,修改此类字符串文字会导致Undefined Behavior

    input = "CONTINUE";

做上述2的正确方法是:

char* input = (char*)malloc(sizeof(MAX_LENGTH)); 
strcpy(input, "YOURSTRING"); 

哪里MAX_LENGTH足以容纳您的输入字符串。

于 2011-12-09T03:55:41.000 回答
1

您正在尝试更改非法的文字。尝试:

char* input = (char*)malloc(sizeof(char)); /* You need more than one char. */
char* input = (char*)malloc(LENGTH); /* Allocate `LENGTH` chars. */

input = "CONTINUE"; /* You can't write (scanf) over a string literal. */
strcpy(input, "CONTINUE"); /* Now it's legal to write over `input`. */

其他需要注意的点:

  • 与裸“%s”一起使用scanf是不安全的。您应该使用类似"%10s"的方法来确保潜在的恶意用户输入的字符不超过 10 个

  • 您知道sizeof(char)不需要,因为它保证为 1吗?

于 2011-12-09T03:56:03.323 回答