这似乎是一件很愚蠢的事情,但我真的不知道为什么会这样。可能是它几乎凌晨5点,我仍然这样做但是......
它应该打印-CA,但为什么当我编译它时,它正在打印
-
CA?
而不是-CA,在任何地方都没有'\ n'。 你们能想出任何可以解释它的逻辑吗?
int main(int argc, char* argv[]){
int check = 0;
char *thing = (char*)malloc(2 * sizeof(char));
strcpy(char, "CA");
some code..
do{
more code...
if(condition== 1) {
more code....
if(check == 0) {
printf("-");
check++;
}
if (some conditon != NULL){
printf("%s\n",thing);
}while(condition)
return 0;
}
答案 0 :(得分:4)
您没有为字符串分配足够的空间。每个字符串都有一个空终止符,因此一个2字符的字符串在数组中需要3个字节。当strcpy()
复制空字节时,thing
正在写char *thing = malloc(3);
数组的边界之外,这会导致未定义的行为。
使用
strdup()
您还可以使用char *thing = strdup("CA");
,它在动态内存中创建一个字符串的副本,根据原始字符串的长度自动分配足够的空间。
$urlRouterProvider.otherwise('//recentStudies');
答案 1 :(得分:1)
printf
将空终止字符串输出到stdout
。如果sting不是null终止,printf
将继续向stdout
打印垃圾,直到满足null终止符
所以你应该把所有人都放到你的角色阵列
char thing[3] = {'C','A',0};
现在printf
将打印
-
CA