的数组定义中添加一个数字
我是新手。
我正试图使一个C程序,反转从命令行给出的字符串,并创建一个线程,这样做的每一个。当我运行它给我分割错误。
代码如下:
#include <stdio.h>
#include <sys/types.h>
#include <pthread.h>
#include <stdlib.h>
#include <fcntl.h>
char* final[1000];
pthread_mutex_t *mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_t p[];
void *reverse(void* arg){
char* s[100];
char* temp;
int i;
strcpy(s,(char*)arg);
printf("S este %s",s);
for(i=0;i<=strlen(s)/2;i++){
strcpy(temp,s[i]);
strcpy(s[i],s[strlen(s)-i-1]);
strcpy(s[strlen(s)-i-1],temp);
}
sleep(1);
pthread_mutex_lock(&mutex);
strcat(final,s);
printf("Intermediar %s",s);
pthread_mutex_unlock(&mutex);
return NULL;
}
int main(int argc,char* argv[]) {
int i;
int n = argc;
strcpy(final,"");
for(i=1;i<n-2;i++){
pthread_create(&p[i],NULL,reverse,argv[i]);
}
for(i=1;i<n-2;i++){
pthread_join(p[i],NULL);
}
//printf("Sirul final este %s",final);
return 0;
}
有谁知道一个可以帮助我学习线程的好网站吗?
谢谢!
char* final[1000];
是一个指针指向char的数组(包含1000个元素),您需要一个char数组:
char final[1000];
这个数组也有同样的问题:
char* s[100];
temp被声明为指针,但您使用它作为大小为1的数组
声明不带*的互斥锁,删除初始化并在main中添加:
pthread_mutex_init(&mutex, NULL);
你还应该在pthread_t
您从未初始化temp
,因此调用strcpy(temp, s[i]);
会导致未定义行为。
你对s
的处理也很混乱,arg
(一个字符串)复制到s
(一个字符串指针数组)使用的内存是无效的。仅仅因为你可以抛弃警告并不意味着你在做明智的事情。