[英]How can I fix the segmentation fault error in C language on Linux?
在我的 C 程序中,我試圖更改包含/etc/passwd記錄的密碼文件的 gecos 字段。 首先,用戶輸入賬戶名,程序找到輸入賬戶名的gecos字段,如果gecos字段的大小大於0,程序要求用戶輸入新的gecos字段。 然后,如果新的 gecos 字段和舊的 gecos 字段的大小相等,它應該更新它,但我想我有一個問題gec=malloc(strlen(pw->pw_gecos)+1);
部分是因為我收到分段錯誤錯誤。 我該如何解決這個問題? 先感謝您。
我的代碼如下:
struct passwd *pw;
struct passwd *pwd;
char *gec;
printf("Enter the account name: ");
scanf("%s", &sItem);
if ((pw = getpwnam(sItem)) == NULL) {
printf("getpwnam: unknown %s\n",
"passwd.idx" );
exit(0);
}
if ((pw->pw_gecos = malloc(strlen(pw->pw_gecos)) + 1) == NULL) {
puts("error");
return 3;
}
int sz = strlen(pw->pw_gecos);
printf("Account name: %s\n", sItem);
printf("Size of the entered GECOS field: %d\n", sz);
if (sz > 0) {
printf("Update the gecos field: ");
scanf("%s", &gec);
if (strlen(gec) == sz) {
//pw->pw_gecos = pwd->pw_gecos;
gec = malloc(strlen(pw->pw_gecos) + 1);
//gec = pwd->pw_gecos;
printf("Gecos field is updated successfully!");
printf("Updated GECOS field: %s\n", pwd->pw_gecos);
//gec = pw->pw_gecos;
}
}
pw->pw_gecos = malloc(strlen(pw->pw_gecos)) + 1)
用指向未初始化數據的指針覆蓋由getpwnam()
設置的指針。
當您嘗試讀取字符串pw->pw_gecos
時,代碼的 rest 具有未定義的行為。
目前尚不清楚您要實現的目標,因為您只發布了一個缺少上下文和定義的代碼片段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.