为什么这不能通过gcc编译,而是通过vc6.0
成功编译gcc版本4.1.2 20070115(SUSE Linux)
linux:~# cc t.c
t.c: In function ‘main’:
t.c:24: error: invalid use of non-lvalue array - printf((confFQDNtolower(&tFQDN)).strName);
代码:
#include <stdio.h>
#include <ctype.h>
typedef struct {
char strName[128];
unsigned short wLen;
}T_FQDN;
T_FQDN confFQDNtolower(T_FQDN *ptFQDN)
{
static T_FQDN tFQDN = {0};
int i;
tFQDN.wLen = ptFQDN->wLen;
for (i = 0; i < ptFQDN->wLen; i++)
{
tFQDN.strName[i] = tolower(ptFQDN->strName[i]);
}
return tFQDN;
}
int main()
{
T_FQDN tFQDN = {"a.B.c", 5};
printf((confFQDNtolower(&tFQDN)).strName);
return 0;
}
答案 0 :(得分:1)
尝试
printf(&(confFQDNtolower(&tFQDN).strName[0]));
请参阅此处接受的答案和评论,以了解为什么这会改变一切。 C - invalid use of non-lvalue array
答案 1 :(得分:0)
你唯一需要改变的是printf()行:
printf("%s", (confFQDNtolower(&tFQDN)).strName);
上述内容适用于GCC和VisualStudio的CL编译器。
答案 2 :(得分:-3)
我认为应该以下列方式更改代码。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char *strName;
unsigned short wLen;
}T_FQDN;
T_FQDN confFQDNtolower(T_FQDN *ptFQDN)
{
static T_FQDN tFQDN = {NULL,0};
int i;
tFQDN.wLen = ptFQDN->wLen;
if(!tFQDN.strName) free(tFQDN.strName);
tFQDN.strName = strdup(ptFQDN->strName);
for (i = 0; i < ptFQDN->wLen; i++)
{
tFQDN.strName[i] = tolower(tFQDN.strName[i]);
}
return tFQDN;
}