你好,我有一个如下代码
char *str ;
strcpy(str, "\t<");
strcat(str, time);
strcat(str, ">[");
strcat(str, user);
strcat(str, "]");
strcat(str, "(");
strcat(str, baseName);
strcat(str, ") $ ");
printf("\String is now: %s\n", str);
这段代码似乎可以工作,但是当我使用 XCode 分析函数时,它说“函数调用参数是一个未初始化的值”,而且它有时会导致我的程序崩溃。当我删除它时,它工作正常......这有什么问题吗?谢谢
strcpy
and strcat
用于将字符串复制并连接到分配的 char 数组。
Since str
在未初始化的情况下,您正在内存中的某个位置写入,这很糟糕,因为您正在破坏其他数据。它可能在那一刻起作用,但迟早你的程序会崩溃。
您应该在声明 str 时分配内存:
char str[100];
Also, strcat
效率不高,因为它需要搜索字符串末尾才能知道在哪里连接字符。使用sprintf
会更有效率:
sprintf(str, "\t<%s>[%s](%s) $ ", time, user, baseName);
最后,如果不能保证生成的字符串适合数组,最好使用 snsprintf。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)