为什么arr[56]=“ ”;里面加了空格或者其他字符就能打印,而不加空格就无法打印出来。
问题描述:
#include <stdio.h>
#include <semaphore.h>
#include <pthread.h>
#include <string.h>
char arr[56]=" ";
sem_t sem,sem1;
int i=0;
void *Fun(void *arg)
{
while(i<=56)
{
sem_wait(&sem1);
i++;
arr[i]='b';
sem_post(&sem);
}
return NULL;
}
void *Fun1(void *arg)
{
while(i<=56)
{
sem_wait(&sem);
i++;
arr[i]='a';
sem_post(&sem1);
}
return NULL;
}
int main(int argc, const char *argv[])
{
int ret=0;
pthread_t pid,pid1;
// memset(arr,0,56);
ret=sem_init(&sem,0,1);
if(ret!=0)
{
printf("sem_init is fail\n");
return -1;
}
ret=sem_init(&sem1,0,0);
if(ret!=0)
{
printf("sem_init is fail\n");
return -1;
}
ret=pthread_create(&pid,NULL,Fun,NULL);
if(ret!=0)
{
printf("Fun create is failed\n");
return -1;
}
ret=pthread_create(&pid1,NULL,Fun1,NULL);
if(ret!=0)
{
printf("Fun1 create is failed\n");
return -1;
}
pthread_join(pid,NULL);
pthread_join(pid1,NULL);
printf("%s\n",arr);
return 0;
}
stu@stu-VirtualBox:~/day5$ ./a.out
ababababababababababababababababababababababababababababab
stu@stu-VirtualBox:~/day5$
为什么arr[56]=“ ”;里面加了空格或者其他字符就能打印,而不加空格就无法打印出来。
答
i++放到arr[i]赋值后面,不然就从从arr[1]开始赋值。
而char arr[] = "";是将str数组的所有元素都初始化为'\0'.就会导致读到arr[0]时就认为结束了。
答
你是在Linux 平台运行的?