字符串拷贝函数没有返回值的strcpy

问题描述:

sipurlregurlNSString这是我从UItextField字符串拷贝函数没有返回值的strcpy

const char *sipAddr = [sipUrl cStringUsingEncoding:NSUTF8StringEncoding]; 
    const char *regAddr = [regUrl cStringUsingEncoding:NSUTF8StringEncoding]; 
    const char *uname = [orgUsername cStringUsingEncoding:NSUTF8StringEncoding]; 
    const char *pword = [password cStringUsingEncoding:NSUTF8StringEncoding]; 
    //const char *pword = [password UTF8String]; 
    const char *realm = [realmStr cStringUsingEncoding:NSUTF8StringEncoding]; 

    //char *sipAddrArr=strdup(sipAddr); 
    //char *regAddrArr=strdup(regAddr); 
    //char *unamearr=strdup(uname); 
    //char *pwordarrnew = strdup(pword); 

    char sipAddrArr[[sipUrl length]]; 
    strcpy(sipAddrArr,sipAddr); 

    char regAddrArr[[regUrl length]]; 
    strcpy(regAddrArr,regAddr); 

    char unamearr[[orgUsername length]] ; 
    strcpy(unamearr, uname); 

    char pwordarrnew[[password length]]; 
    strcpy(pwordarrnew,pword); 

    char realmchr[[realmStr length]]; 
    strcpy(realmchr,realm); 
    char pwordarr1[] = {"10000"}; 
    printf("\nPassword value sent: %s",pword); 
    printf("\nPassword value sent: %s",pwordarr1); 

pword具有价值得到试图复制不变焦炭为char我用它返回strcpy函数pword没有价值。在模拟器中测试时,相同的代码工作正常,但在连接到iOS手机时不起作用。

+0

您是否做过任何调试?就像在某些地方添加一些'printf'语句,看看那个时候变量中的值是什么?如果没有,请尝试一下并检查“pword”的值。 –

+0

@kiner_shah是pword有来自textfield的值,但是当我尝试将pword的值复制到pwordarrnew时pwordarrnew没有值,当我尝试打印时。 – Jeeva

这可能是也可能不是你的问题的原因,但它是在你的代码中的错误:

您正在服用NSString,将其转换为UTF8 C-字符串,然后复制C-字符串转换为根据NSString的长度大小的C数组。这是错误的,NSString和它的UTF8转换可以有不同的长度。您需要确定UTF8字符串的长度并允许字符串结束标记。例如:

char sipAddrArr[strlen(sipAddr)+1]; 
strcpy(sipAddrArr,sipAddr); 

对于其他阵列也是类似的。

HTH

+0

我尝试了ur方法,但仍然没有改变。当我使用strcpy函数时,pwordarr中没有任何值。所有其他数组都有值,但pwordarr在我打印时没有值 – Jeeva

+0

您需要使用调试器(或打印语句)检查变量和值,特别是检查'strlen'返回的内容,'sipAddr'指向的内存以及'password'本身不是空的/ null。您仍然需要上述更改,否则会出现问题。 – CRD

+0

我用打印语句来打印所有变量的值..但只有pwordarrnew没有值,当我使用strcpy后打印它。 – Jeeva