PS D:\ZigProjects\Password_Generator> zig run ./src/main.zig
src\main.zig:29:19: error: root source file struct 'std' has no member named 'rand'
var rng = std.rand.DefaultPrng.init(std.time.nanoTimestamp());
const std = @import("std");
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
const stdin = std.io.getStdIn().reader();
const allocator = std.heap.page_allocator;
// Prompt the user for the desired password length
try stdout.print("Length: ", .{});
const length_input = try allocator.alloc(u8, 64);
defer allocator.free(length_input);
const length_str = try stdin.readUntilDelimiterOrEof(length_input, '\n') orelse return;
const length: usize = try std.fmt.parseInt(usize, length_str, 10);
// Validate the password length
if (length <= 0) {
try stdout.print("Password length must be >= 1!\n", .{});
return;
}
// Allocate memory for the password
const password = try allocator.alloc(u8, length + 1);
defer allocator.free(password);
// Define character pools
const digits = "0123456789";
const lowers = "abcdefghijklmnopqrstuvwxyz";
const uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const symbols = "!@#$%^&*()";
// Seed the random number generator
var rng = std.Random.DefaultPrng.init(std.time.nanoTimestamp());
// Generate the password
for (password[0..length]) |i| {
const char_type = rng.int(u8) % 4;
password[i] = switch (char_type) {
0 => digits[rng.int(u8) % digits.len],
1 => lowers[rng.int(u8) % lowers.len],
2 => uppers[rng.int(u8) % uppers.len],
else => symbols[rng.int(u8) % symbols.len],
};
}
// Null-terminate the password
password[length] = 0;
// Print the generated password
try stdout.print("Password: {s}\n", .{password});
}
Error
PS D:\ZigProjects\Password_Generator> zig run ./src/main.zig
src\main.zig:33:65: error: expected type 'u64', found 'i128'
var rng = std.Random.DefaultPrng.init(std.time.nanoTimestamp());
After going thru the document as you you suggested, I have encountered the hit with my modified code:
const std = @import("std");
const random = @import("std").Random;
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
const stdin = std.io.getStdIn().reader();
const allocator = std.heap.page_allocator;
// Prompt the user for the desired password length
try stdout.print("Length: ", .{});
const length_input = try allocator.alloc(u8, 64);
defer allocator.free(length_input);
const length_str = try stdin.readUntilDelimiterOrEof(length_input, '\n') orelse return;
const length: usize = try std.fmt.parseInt(usize, length_str, 10);
// Validate the password length
if (length <= 0) {
try stdout.print("Password length must be >= 1!\n", .{});
return;
}
// Allocate memory for the password
const password = try allocator.alloc(u8, length + 1);
defer allocator.free(password);
// Define character pools
const digits = "0123456789";
const lowers = "abcdefghijklmnopqrstuvwxyz";
const uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const symbols = "!@#$%^&*()";
// Seed the random number generator
var rng = random.DefaultPrng.init(std.time.milliTimestamp());
// Generate the password
for (password[0..length]) |i| {
const char_type = rng.nextInt(u8) % 4;
password[i] = switch (char_type) {
0 => digits[rng.nextInt(u8) % digits.len],
1 => lowers[rng.nextInt(u8) % lowers.len],
2 => uppers[rng.nextInt(u8) % uppers.len],
else => symbols[rng.nextInt(u8) % symbols.len],
};
}
// Null-terminate the password
password[length] = 0;
// Print the generated password
try stdout.print("Password: {s}\n", .{password});
}
Error:
PS D:\ZigProjects\Password_Generator> zig run .\src\main.zig
src\main.zig:34:62: error: expected type 'u64', found 'i64'
var rng = random.DefaultPrng.init(std.time.milliTimestamp());
~~~~~~~~~~~~~~~~~~~~~~~^~
src\main.zig:34:62: note: unsigned 64-bit int cannot represent all possible signed 64-bit values
D:\Programs\Zig\lib\std\Random\Xoshiro256.zig:11:21: note: parameter type declared here
pub fn init(init_s: u64) Xoshiro256
const std = @import("std");
const random = @import("std").Random;
pub fn main() !void {
const stdout = std.io.getStdOut().writer();
const stdin = std.io.getStdIn().reader();
const allocator = std.heap.page_allocator;
// Prompt the user for the desired password length
try stdout.print("Length: ", .{});
const length_input = try allocator.alloc(u8, 64);
defer allocator.free(length_input);
const length_str = try stdin.readUntilDelimiterOrEof(length_input, '\n') orelse return;
const length: usize = try std.fmt.parseInt(usize, length_str, 10);
// Validate the password length
if (length <= 0) {
try stdout.print("Password length must be >= 1!\n", .{});
return;
}
// Allocate memory for the password
const password = try allocator.alloc(u8, length + 1);
defer allocator.free(password);
// Define character pools
const digits = "0123456789";
const lowers = "abcdefghijklmnopqrstuvwxyz";
const uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const symbols = "!@#$%^&*()";
// Seed the random number generator
const timeStamp = std.time.milliTimestamp();
std.debug.print("Seed: {}\n", .{timeStamp});
const bit_seed: u64 = @bitCast(timeStamp);
var rng = random.DefaultPrng.init(bit_seed);
// Generate the password
for (password[0..length]) |i| {
const char_type = rng.random.u8() % 4;
password[i] = switch (char_type) {
0 => digits[rng.random.u8() % digits.len],
1 => lowers[rng.random.u8() % lowers.len],
2 => uppers[rng.random.u8() % uppers.len],
else => symbols[rng.random.u8() % symbols.len],
};
}
// Null-terminate the password
password[length] = 0;
// Print the generated password
try stdout.print("Password: {s}\n", .{password});
}
Error:
PS D:\ZigProjects\Password_Generator> zig run .\src\main.zig
src\main.zig:41:31: error: no field named 'random' in struct 'Random.Xoshiro256'
const char_type = rng.random.u8() % 4;
^~~~~~
D:\Programs\Zig\lib\std\Random\Xoshiro256.zig:1:1: note: struct declared here
//! Xoshiro256++ - http://xoroshiro.di.unimi.it/
// Prompt the user for the desired password length
try stdout.print("Length: ", .{});
const length_input = try allocator.alloc(u8, 64);
defer allocator.free(length_input);
var length_str = try stdin.readUntilDelimiterOrEof(length_input, '\n') orelse return;
// Manually remove any newline characters
while (length_str[length_str.len - 1] == '\n' or length_str[length_str.len - 1] == '\r') {
length_str = length_str[0 .. length_str.len - 1];
}
std.debug.print("Length: {s}\n", .{length_str});
const length: usize = try std.fmt.parseInt(usize, length_str, 10);
// Validate the password length
if (length <= 0) {
try stdout.print("Password length must be >= 1!\n", .{});
return;
}
// Allocate memory for the password
const password = try allocator.alloc(u8, length + 1);
defer allocator.free(password);
// Define character pools
const digits = "0123456789";
const lowers = "abcdefghijklmnopqrstuvwxyz";
const uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const symbols = "!@#$%^&*()";
// Seed the random number generator
const timeStamp = std.time.milliTimestamp();
std.debug.print("Seed: {}\n", .{timeStamp});
const bit_seed: u64 = @bitCast(timeStamp);
var rng = random.DefaultPrng.init(bit_seed);
// Generate the password
for (password[0..length]) |i| {
const char_type: u8 = @intCast(rng.next() % 4);
password[i] = switch (char_type) {
0 => digits[@intCast(rng.next() % digits.len)],
1 => lowers[@intCast(rng.next() % lowers.len)],
2 => uppers[@intCast(rng.next() % uppers.len)],
else => symbols[@intCast(rng.next() % symbols.len)],
};
}
// Null-terminate the password
password[length] = 0;
// Print the generated password
try stdout.print("Password: {s}\n", .{password});
}
Hit Error
PS D:\ZigProjects\Password_Generator> zig run .\src\main.zig
Length: 32
Length: 32
Seed: 1736844486057
thread 8136 panic: index out of bounds: index 170, len 33
D:\ZigProjects\Password_Generator\src\main.zig:48:17: 0x7ff7110d1d15 in main (main.exe.obj)
password[i] = switch (char_type) {
i gets the value 170 because that is the first character in the password (password[0] → i).
You probably want i to be an index and not the password characters.
I want to generate the password, but I cannot find the way how to resolve it. Do you any way to resolve this hit of error?
Indices: digit_idx = 2, lower_idx = 25, upper_idx = 4, symbol_idx = 5
thread 300 panic: index out of bounds: index 170, len 33