[英]2d char pointer segmentation fault
我正在 linux 終端中為我的 C 程序獲取參數,並試圖將它們傳遞給另一個二維數組指針,但是我遇到了分段錯誤,我嘗試將 argv 二維數組中的內容分配給字符串二維數組. 我怎樣才能成功地做到這一點而不會出錯?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
char **strings = malloc((argc-1) * 100 * sizeof(char));
int j = 1;
while(*(argv + j) != NULL){
for(int i = 0; i < strlen(*(argv + j)); i++){
*(*(strings + j) + i) = *(*(argv + j) + i);
printf("%c", *(*(strings + j) + i));
}
printf("\n");
j++;
}
return 0;
}
看起來您正在嘗試將argv
的內容復制到內存中,然后打印內容。 我希望我能為你畫一張記憶內容的圖片,因為這樣很容易看到發生了什么。 這使用了一個鋸齒狀的數組,所以只要谷歌一下就可以看到一些圖片。 簡而言之, char**
是一個char*
數組。 您的代碼未分配正確的內存大小。 您可以通過argc
確切知道您擁有多少個元素,因此您可以分配strings
。 然后,對於strings
每個char*
,您分配足夠的內存以適合從argv
獲取的數據。 長度來自strlen
,然后將字符串復制到strings
元素指向的內存中。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]){
char** strings = malloc((argc - 1) * sizeof(char*));
for (int i = 0; i < argc - 1; ++i) {
size_t len = strlen(argv[i + 1]);
strings[i] = malloc(len + 1);
strcpy(strings[i], argv[i + 1]);
printf("%s\n", strings[i]);
}
// do what you would like with strings
for (int i = 0; i < argc - 1; ++i)
free(strings[i]);
free(strings);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.