在C中,我无法将字符串数组的单个元素复制到另一个字符串

时间:2017-11-15 01:13:54

标签: c token strcpy strncpy

我有一个包含字符串的字符串“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.此示例为简单起见进行了修改。谢谢!

1 个答案:

答案 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]);
}