我收到这个错误:
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
指向的字符串的开头。