为什么我不能用这样的其他字符串替换字符串?

时间:2014-07-02 05:25:51

标签: c string

我的代码如下所示:

char source[] = "the wrong son";
char output[80];
int  i, j = 0;

for ( i = 0; source[i]; i++ )
    if ( i < 4 || i >= 10 )
        output[j++] = source[i];

output[j] = '\0';

为什么我不能用这样的其他字符串替换字符串:

source = output;

而不是更长的方式:

for ( i = 0; output[i]; i++)
    source[i] = output[i];

source[i] = '\0';

当我尝试source = output;时,没有任何反应。怎么样?

2 个答案:

答案 0 :(得分:1)

在C string中不被视为原始数据类型。因此,您的陈述不合适!

如果字符串是独立的和原始的数据类型,你可以轻松地完成它。但是,这是受限制的并且违反C语言规范。

你必须经历第一条路!或者,您也可以使用strcpy()方法。

答案 1 :(得分:0)

来自C标准ISO / IEC 9899:201x:

  

lvalue是一个潜在的表达式(对象类型不是void)   指定一个对象; 64)如果左值在评估时没有指定对象,则行为未定义。当一个对象被称为具有特定类型时,类型是   由用于指定对象的左值指定。可修改的左值是一个左值   没有数组类型,没有不完整的类型,没有const-   合格的类型,如果是结构或联合,则没有任何成员(包括,   递归地,所有包含聚合或联合的任何成员或元素)   合格的类型。

数组是一个不可修改的左值对象。