我有一个包含字符串的字符串“prompt”。用户必须能够使用用户输入更改提示,我已将其收集并分隔(使用空格作为分隔符)到char
字符串(标记)数组中。
例如,假设:
char **tokens[2] = {"setprompt", "newprompt"};
char *prompt = "oldprompt";
if(strcmp(tokens[0], "setprompt") == 0)
{
strcpy(prompt, tokens[1]);
}
strcmp()
函数完全正常,但当它达到strcpy()
时,tokens[1]
中的元素(字符串"newprompt"
)不会被复制到字符串中提示。这是我的问题。
除了使用strncpy()
之外,我已经尝试过排查,但我认为我的每个变量/指针的声明都存在问题。任何帮助或想法都会很棒。
注意:在我的实际程序中,标记数组的最大大小为2.此示例为简单起见进行了修改。谢谢!
答案 0 :(得分:3)
您的问题是这一行:
char *prompt = "oldprompt";
它指向常量内存,不能修改(定义方式)。考虑将其保留为只读并创建自己的缓冲区,而不是复制和修改类似:
之类的东西#define MAX_STRING_SIZE 255
char *tokens[2] = {"setprompt", "newprompt"};
char *prompt = "oldprompt";
char myBuffer[MAX_STRING_SIZE];
strcpy(myBuffer, prompt );
if(strcmp(tokens[0], "setprompt") == 0)
{
strcpy(myBuffer, tokens[1]);
}