c - 使用 scanf 获取字符串来创建并针对 while 循环验证它...继续获取

标签 c unix scanf c-strings

我正在创建一个 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;
}

最佳答案

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

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

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

    input = "CONTINUE";

执行上述 2 项操作的正确方法是:

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

其中 MAX_LENGTH 足以容纳您的输入字符串。

关于c - 使用 scanf 获取字符串来创建并针对 while 循环验证它...继续获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8440841/

相关文章:

c - LD_PRELOAD 和外部变量

regex - 如何使用反向引用通过正则表达式查找具有三个或更多元音(同类)的单词?

c - sigaction : restore handler or not?

c - 了解结构及其项目的声明位置

c - 在C中添加和打印多个字符

c - Scanf 不适用于 while 循环

c - 打印数组时的额外值(从 %s 转换为 %c)

c++ - Windows套接字编程中主机名的IP地址

c - 如何为多线程分块质数?

c - C 中的指数无法正常工作