我正在创建一个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;
}
答案 0 :(得分:1)
我在第一眼看到的两个问题:
char* input = (char*)malloc(sizeof(char));
您正在为指针指定一个只有一个字符的内存。它应该有足够的内存来保存你的字符串而不仅仅是一个字符。
您应该使用strcpy
将字符串复制到分配的缓冲区中。不为指针指定字符串文字。请注意,修改此类字符串文字会导致未定义的行为。
input = "CONTINUE";
正确的做法是:
char* input = (char*)malloc(sizeof(MAX_LENGTH));
strcpy(input, "YOURSTRING");
MAX_LENGTH
足以容纳您的输入字符串。
答案 1 :(得分: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`. */
需要注意的其他要点:
将scanf
与裸“%s”一起使用是不安全的。您应该使用类似"%10s"
的内容来确保潜在的恶意用户输入的字符数不超过10个
您知道吗<{1}}是不是必需的,因为保证为1 ?